在R中查找数据帧中的序列
这是一个假设的数据帧:在R中查找数据帧中的序列,r,dataframe,sequence,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) 我想创建一个新的列(c),计算b值在当前a值a之前重复了多少次: a b c 1 1 1 0 2 2 1 1 3 3 0 0 4 4 0 1
a <- c(1:10)
b <- sample(seq(from = 0, to = 1, by =1), size = 10, replace = TRUE)
data <- data.frame(a,b)
我想创建一个新的列(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)而不是c=+1,else:0,但我对r相当陌生,所以我不太确定如何实现这样一个过程。任何帮助都将不胜感激
编辑:致力于解决方案:
data <- data.table(data)
data[, c := b + shift(b)]
数据如果您不专注于使用数据表
,您可以看看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
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