gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:38:59 25 4
gpt4 key购买 nike

我想计算过去 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com