我有一个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
的实际值并不重要,只要它可以用来创建这些组。
(如果有人能为这个问题想出一个更好的标题,一定要编辑。这是我能想到的最好的,但不要认为它特别清楚(
一个选项是在"时间"的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"))