如果我有像
这样的矢量"a": 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0
我想知道1
中有多少a
在一起,在这种情况下答案是3和2。
有没有可以执行此操作的脚本?
答案 0 :(得分:18)
请参阅?rle
。
## create example vector
a <- c(rep(0, 3), rep(1, 3), rep(0, 4), rep(1, 2), rep(0, 3))
## count continuous values
r <- rle(a)
## fetch continuous length for value 1
r$lengths[r$values == 1]
# [1] 3 2
答案 1 :(得分:7)
这个怎么样?
test <- c(0,0,0,1,1,1,0,0,0,0,1,1,0,0,0)
rle(test)$lengths[rle(test)$values==1]
#[1] 3 2
对于海量数据,您可以使用一些错综复杂的选择加快速度:
diff(unique(cumsum(test == 1)[test != 1]))
#[1] 3 2
答案 2 :(得分:5)
其他人回答了这个问题。我想补充两点意见:
数据输入技巧:使用扫描(默认为“数字”类,不需要代表或逗号),如果添加“character”作为参数,它也适用于由空格分隔的字符。
a <- scan()
1: 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0
16:
Read 15 items
rle
实际上是rep
arle <- rle(a)
rep(arle$values, arle$lengths)
[1] 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0