我有一個向量是一長串字母,我想知道有多少對字母?例如,如果我有AABBAAACC
,則會有5對。在R中的字符向量中尋找唯一對
我不知道如何做到這一點。
x <- "AABBAAACC"
我是R的初學者,請善待!
我有一個向量是一長串字母,我想知道有多少對字母?例如,如果我有AABBAAACC
,則會有5對。在R中的字符向量中尋找唯一對
我不知道如何做到這一點。
x <- "AABBAAACC"
我是R的初學者,請善待!
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
ADDED更多的解決方案。
找到一個字符的最長運行長度。減去一個以獲得這裏的對數。繼續添加這些。
@G。格羅騰迪克的回答是好,但我認爲一個非正則表達式的方法:
runs <- rle(unlist(strsplit("AABBAAACC", NULL)))
sum(runs[[1]][runs[[1]] > 1] - 1)
好我的實際向量被定義爲y,所以我只是把:?長度(gregexpr(「()(= \\ 1) 「,y,perl = TRUE)[[1]])?當我嘗試它時,我只得到1:這是否意味着只有一對?考慮到我的列表中有5萬個字母,令人感到驚訝.. –
y必須是一個字符串 – rawr