在 R 中的数据框中查找序列

Finding sequences in a data frame in R

这是一个假设的数据框:

a <- c(1:10)                   
b <- sample(seq(from = 0, to = 1, by =1), size = 10, replace = TRUE)                   
data <- data.frame(a,b) 

输出将如下所示:

    a b
1   1 1
2   2 1
3   3 0
4   4 0
5   5 1
6   6 1
7   7 1
8   8 1
9   9 1
10 10 0

我想创建一个新列 (c) 来计算 b 值在 a 的当前 a 值之前重复了多少次:

    a b c
1   1 1 0
2   2 1 1
3   3 0 0
4   4 0 1
5   5 1 0
6   6 1 1
7   7 1 2
8   8 1 3
9   9 1 4
10 10 0 0

我认为它可能需要一个 if 命令,它说的是:if b == shift(b) than c = +1, else: 0,但我对 r 还很陌生,所以我不太了解确定如何实施这样的程序。任何帮助将不胜感激。

编辑:正在寻求解决方案:

data <- data.table(data)
data[, c := b + shift(b)]  

此代码将创建一个列 (c),它将以前的值与当前值相加。

如果你不喜欢使用 data.table,你可以看看 rle

set.seed(123)

a <- c(1:10)
b <- sample(seq(from = 0, to = 1, by =1), size = 10, replace = TRUE)
data <- data.frame(a,b)

len <- rle(data$b)$lengths
data$c <- unlist(sapply(len, function(x) seq.int(1,x)))-1

这给出:

# > data
#     a b c
# 1   1 0 0
# 2   2 1 0
# 3   3 0 0
# 4   4 1 0
# 5   5 1 1
# 6   6 0 0
# 7   7 1 0
# 8   8 1 1
# 9   9 1 2
# 10 10 0 0