나는 긴 문자 목록 인 벡터를 가지고 있으며, 몇 쌍의 문자가 있는지 알고 싶습니다. 예를 들어 AABBAAACC
이 있으면 5 쌍이됩니다.R 문자 벡터에서 고유 한 쌍 찾기 R
어떻게해야할지 모르겠다.
x <- "AABBAAACC"
저는 초보자입니다. 친절하게 대해주세요!
나는 긴 문자 목록 인 벡터를 가지고 있으며, 몇 쌍의 문자가 있는지 알고 싶습니다. 예를 들어 AABBAAACC
이 있으면 5 쌍이됩니다.R 문자 벡터에서 고유 한 쌍 찾기 R
어떻게해야할지 모르겠다.
x <- "AABBAAACC"
저는 초보자입니다. 친절하게 대해주세요!
1) gregexpr이 시도 :
> length(gregexpr("(.)(?=\\1)", "AABBAAACC", perl = TRUE)[[1]])
[1] 5
2) rollapply
> library(zoo)
> > sum(rollapply(strsplit("AABBAAACC", "")[[1]], 2, function(x) x[1] == x[2]))
[1] 5
2A) 또는 약간 더 컴팩트 :
> library(zoo)
> library(gsubfn)
> sum(fn$rollapply(strsplit("AABBAAACC", "")[[1]], 2, ~ x[1] == x[2]))
[1] 5
3) 머리/꼬리
> s <- strsplit("AABBAAACC", "")[[1]]
> sum(tail(s, -1) == head(s, -1))
[1] 5
는 이상의 솔루션을 추가했다.
한 문자의 최장 실행 길이를 찾습니다. 여기에서 쌍의 수를 구하려면 1을 빼십시오. 계속 추가하십시오.
@G. 그로 텐 디크의 대답은 잘하지만 난이 아닌 정규식 접근 방식의 생각 :
runs <- rle(unlist(strsplit("AABBAAACC", NULL)))
sum(runs[[1]][runs[[1]] > 1] - 1)
그럼 내 실제 벡터를 Y로 정의된다, 그래서 그냥 둘 것 :.? 길이 (gregexpr ("() (= \\ 1) ", y, perl = TRUE) [[1]])? 내가 그것을 시도하면, 나는 단지 1을 얻는다 : 이것은 단지 한 쌍이 있다는 것을 의미합니까? 꽤 놀라운 건 내 목록에 50k 글자가 있다고 생각하면 .. –
y는 문자열이어야합니다. – rawr