1

我有个问题。

我有一个向量,由 0 或 1 组成 - 例如 (011011111011100001111)。在 R 中,我需要弄清楚,如何计算向量 2 1、3 1、4 1 等出现的次数。在这个示例向量中,我有 1 乘以 11、1 乘以 111、1 乘以 1111 和 1 乘以 11111。

非常感谢,彼得

4

2 回答 2

4

我假设你有一个像c(0, 1, 1, 0...).

这是使用tableand的解决方案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 

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

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

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

于 2013-04-17T10:11:52.703 回答
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
于 2013-04-17T10:12:52.857 回答