在 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
这是一个假设的数据框:
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