Goodmorning StackOverflow,
我已经看到类似问题的答案,但是,他们不考虑group_ID
,并且不足以在大量数据集上运行。
我正在努力寻找以下任务的解决方案:
每个group_ID
的连续元素,递归计算difference
,其中上一个元素从第二个开始属于该group_ID的最后一个元素。
因此,考虑以下样本数据:
data <- data.frame(time = c(1:3, 1:4),
group_ID = c(rep(c("1", "2"), c(3, 4))),
value = c(0, 400, 2000, 0, 500, 2000, 2120))
我想找到的解决方案的预期结果是:
solution_df <- data.frame(time = c(1:3, 1:4),
group_ID = c(rep(c("1", "2"), c(3, 4))),
difference = c(NA, 400, 1600, NA, 500, 1500, 120))
至关重要的是要记住,数据集非常庞大,解决方案必须高效。
我希望问题很清楚,否则请询问进一步的细节。
答案 0 :(得分:1)
您可以使用data.table进行分组,使用diff
来计算差异。
library(data.table)
setDT(data)
data[, .(time = time,
difference = c(NA, diff(value))), by = group_ID]
# group_ID time difference
#1: 1 1 NA
#2: 1 2 400
#3: 1 3 1600
#4: 2 1 NA
#5: 2 2 500
#6: 2 3 1500
#7: 2 4 120
我不知道这里应该递归什么。