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

时间:2015-11-27 23:08:16

标签: r dataframe sequence

这是一个假设数据框:

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 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命令,例如:如果b == shift(b)而不是c = +1,否则:0,但我对r很新,所以我不太确定实施这样的程序。任何帮助将不胜感激。

编辑:努力寻求解决方案:

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

此代码将创建一个列(c),该列将使用当前值添加先前的值。

1 个答案:

答案 0 :(得分:2)

如果您不关注使用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