[英]Finding unique pairs in a character vector in R
我有一个很长的字母列表,我想知道有多少对字母? 例如,如果我有AABBAAACC
则会有5对。
我不知道该怎么做。
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
增加了更多解决方案。
@G。 格洛腾迪克的答案更好,但我想到了一种非正则表达方法:
runs <- rle(unlist(strsplit("AABBAAACC", NULL)))
sum(runs[[1]][runs[[1]] > 1] - 1)
找到一个字符的最长运行长度。 减去一个以获得对的数量。 继续添加这些。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.