我有一个data.frame:
value time
1 1 3
2 2 6
3 3 9
4 4 12
5 5 15
6 6 18
7 7 21
8 8 0
9 9 3
10 10 6
11 11 18
12 12 6
我想添加一列表示从6
到6
之前的值的窗口。即:
value time window
1 1 3 3
2 2 6 3
3 3 9 2
4 4 12 2
5 5 15 2
6 6 18 2
7 7 21 2
8 8 0 2
9 9 3 2
10 10 6 2
11 11 18 1
12 12 6 1
window
的实际值并不重要,只要它可用于组成这些组即可。
(如果任何人都可以想出更好的标题,请编辑。这是我能想到的最好的方法,但并不特别清楚)
答案 0 :(得分:1)
一种选择是在rev
的'时间'上创建一个逻辑向量,进行累加和并rev
的输出
library(dplyr)
df1 %>%
mutate(window = rev(cumsum(rev(time) == 6)))
# value time window
#1 1 3 3
#2 2 6 3
#3 3 9 2
#4 4 12 2
#5 5 15 2
#6 6 18 2
#7 7 21 2
#8 8 0 2
#9 9 3 2
#10 10 6 2
#11 11 18 1
#12 12 6 1
或者在base R
df1$window <- with(df1, rev(cumsum(rev(time) == 6)))
df1 <- structure(list(value = 1:12, time = c(3L, 6L, 9L, 12L, 15L, 18L,
21L, 0L, 3L, 6L, 18L, 6L)), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"))