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

  • 本文关键字:窗口 表示 时间 结束 添加 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

我想添加一个列,表示在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"))

最新更新