在向量中出现多少次1对

时间:2013-04-17 10:01:49

标签: r

我有一个问题。

我有一个向量,由0或1组成 - 例如(011011111011100001111)。在R中我需要弄清楚,如何计算向量中出现的次数为1,三个1,四个1等等。在这个例子中,我有1次11次,1次111次,1次1111次和1次11111次。

非常感谢,彼得

2 个答案:

答案 0 :(得分:4)

我假设你有一个像c(0, 1, 1, 0...)这样的实际向量。

以下是使用tablerle的解决方案。我还提供了一些更长的样本数据,使其更有趣。

set.seed(1)
myvec <- sample(c(0, 1), 100, replace = TRUE)
temp <- rle(myvec)
table(temp$lengths[temp$values == 1])
# 
#  1  2  3  4  6 
# 15  8  1  2  1 

如果你确实正在处理一个长零的疯狂字符串,只需使用strsplit并遵循与上面相同的逻辑。

myvec <- "00110111100010101101101000001001001110101111110011010000011010001001"
myvec <- as.numeric(strsplit(myvec, "")[[1]])

在这里,我已经转换为数字,但这只是为了你可以使用与之前相同的代码。您也可以在字符向量上使用rle

答案 1 :(得分:2)

rle是你的朋友:

vec <-c(0,1,1,0,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,1,1)
res <-data.frame(table(rle(vec)))
res[res$values==1,]

   lengths values Freq
6        1      1    0
7        2      1    1
8        3      1    1
9        4      1    1
10       5      1    1