我有一个问题。
我有一个向量,由0或1组成 - 例如(011011111011100001111)。在R中我需要弄清楚,如何计算向量中出现的次数为1,三个1,四个1等等。在这个例子中,我有1次11次,1次111次,1次1111次和1次11111次。
非常感谢,彼得
答案 0 :(得分:4)
我假设你有一个像c(0, 1, 1, 0...)
这样的实际向量。
以下是使用table
和rle
的解决方案。我还提供了一些更长的样本数据,使其更有趣。
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