r - 统计过去 n 天内值变化的次数

标签 r data.table

我想计算过去 d 天内与前一个 num 不相等的 num 的数量,最好是 .

我的数据如下所示:

d <- 3
   df1 <- structure(list(LET = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 
                                         2L, 2L, 2L, 2L), 
                                       .Label = c("a", "b"), class = "factor"), 
                   day = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L),
                   num = c(5, 6, 6, 7, 7, 1, 1, 3, 1, 1)), 
              class = c("data.table", "data.frame"), 
              row.names = c(NA, -10L))
    LET day num
 1:   a   1   5
 2:   a   2   6
 3:   a   3   6
 4:   a   4   7
 5:   a   5   7
 6:   b   1   1
 7:   b   2   1
 8:   b   3   3
 9:   b   4   1
10:   b   5   1

而且我可以用 shift 来表示 num 是否等于其滞后值,无论 num 是否已更改:

df1[,hasChanged := num!=shift(num, n=1, fill=FALSE), by='LET']

但我想通过 LET 计算 day <= currentRowDay & day > currentRowDay - d 的 num 更改次数。

输出如下所示(hasChanged 列是可选的):

df1[,NumberOfChangesPast3Days := c(1,2,2,2,1,1,1,2,2,2),]

    LET day num hasChanged NumberOfChangesPast3Days
 1:   a   1   5       TRUE                        1
 2:   a   2   6       TRUE                        2
 3:   a   3   6      FALSE                        2
 4:   a   4   7       TRUE                        2
 5:   a   5   7      FALSE                        1
 6:   b   1   1       TRUE                        1
 7:   b   2   1      FALSE                        1
 8:   b   3   3       TRUE                        2
 9:   b   4   1       TRUE                        2
10:   b   5   1      FALSE                        2

最佳答案

一个可能的解决方案是使用 Reduceshift:

df1[, N_Changes := Reduce(`+`, shift(hasChanged, n = 0:(d-1), fill = FALSE))
    , by = LET]

给出:

> df1
    LET day num hasChanged N_Changes
 1:   a   1   5       TRUE         1
 2:   a   2   6       TRUE         2
 3:   a   3   6      FALSE         2
 4:   a   4   7       TRUE         2
 5:   a   5   7      FALSE         1
 6:   b   1   1       TRUE         1
 7:   b   2   1      FALSE         1
 8:   b   3   3       TRUE         2
 9:   b   4   1       TRUE         2
10:   b   5   1      FALSE         2

关于r - 统计过去 n 天内值变化的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60587955/

相关文章:

R trycatch() 与 err 和 warn 处理程序一起使用,但 Shiny 仍然崩溃?

r - 计算 SpatialPolygon 内/内部的质心

r - 用空因子聚合但保留行

R data.table 'by' 使用表达式时的行为

r - 如何对 data.table 列重新排序?

r - R函数确定是否正在运行另一个应用程序

R Shiny - 旋转 tabPanel 和 onclick 函数

r - Data.table - 多个表的左外连接

r - 具有多个分组变量集的数据表操作

R中的另一个变量的总和