在R中的字符向量中查找唯一对

时间:2014-02-09 16:21:32

标签: r vector

我有一个很长的字母列表,我想知道有多少对字母?例如,如果我有AABBAAACC,则会有5对。

我不知道该怎么做。

x <- "AABBAAACC"

我是R的初学者,所以请善待!

3 个答案:

答案 0 :(得分:3)

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 更多解决方案。

答案 1 :(得分:1)

@G。格洛腾迪克的答案更好,但我想到了一种非正则表达方式:

runs <- rle(unlist(strsplit("AABBAAACC", NULL)))
sum(runs[[1]][runs[[1]] > 1] - 1)

答案 2 :(得分:-1)

找到一个角色的最长跑步长度。减去一个以获得对的数量。继续添加这些。