我有个问题。
我有一个向量,由 0 或 1 组成 - 例如 (011011111011100001111)。在 R 中,我需要弄清楚,如何计算向量 2 1、3 1、4 1 等出现的次数。在这个示例向量中,我有 1 乘以 11、1 乘以 111、1 乘以 1111 和 1 乘以 11111。
非常感谢,彼得
我有个问题。
我有一个向量,由 0 或 1 组成 - 例如 (011011111011100001111)。在 R 中,我需要弄清楚,如何计算向量 2 1、3 1、4 1 等出现的次数。在这个示例向量中,我有 1 乘以 11、1 乘以 111、1 乘以 1111 和 1 乘以 11111。
非常感谢,彼得
我假设你有一个像c(0, 1, 1, 0...)
.
这是使用table
and的解决方案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
在字符向量上使用。
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