【发布时间】:2020-03-08 13:27:54
【问题描述】:
我想计算过去 d 天内不等于前一个 num 的 num 的数量,最好是 data.table。
我的数据如下所示:
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']
但我想计算 num 更改的次数,其中 day currentRowDay - d ,LET。
输出如下所示(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
【问题讨论】:
-
我认为这并不完全清楚 - 您需要发布您的预期输出。
-
发布的预期输出。
标签: data.table r data.table