添加表示具有一定结束时间(但窗口长度不同)的窗口的列

时间:2019-05-31 19:49:37

标签: r

我有一个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

我想添加一列表示从66之前的值的窗口。即:

   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的实际值并不重要,只要它可用于组成这些组即可。

(如果任何人都可以想出更好的标题,请编辑。这是我能想到的最好的方法,但并不特别清楚)

1 个答案:

答案 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"))