gpt4 book ai didi

r - 与组内或外部变量中较早实例的差异

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

我有数据

dat1 <- data.table(id=1:9,
group=c(1,1,2,2,2,3,3,3,3),
t=c(14,17,20,21,26,89,90,95,99),
index=c(1,2,1,2,3,1,2,3,4)
)

我想计算 t 上的差异到之前的值,根据 index .对于每个组的第一个实例,我想计算与某些外部变量的差异
dat2 <- data.table(group=c(1,2,3),
start=c(10,15,80)
)

从而应得到以下结果:
> res 
id group t index dif
1: 1 1 14 1 4
2: 2 1 17 2 3
3: 3 2 20 1 5
4: 4 2 21 2 1
5: 5 2 26 3 5
6: 6 3 89 1 9
7: 7 3 90 2 1
8: 8 3 95 3 5
9: 9 3 99 4 4

我试过使用
dat1[ , ifelse(index == min(index), dif := t - dat2$start, dif := t - t[-1]), by = group]

但我不确定在一个步骤中是否引用同一组的其他元素和外部元素。这完全可能使用data.table吗?

最佳答案

一个可能的解决方案:

dat1[, dif := ifelse(index == min(index),
t - dat2$start[match(.BY, dat2$group)],
t - shift(t))
, by = group][]

这使:

   id group  t index dif
1: 1 1 14 1 4
2: 2 1 17 2 3
3: 3 2 20 1 5
4: 4 2 21 2 1
5: 5 2 26 3 5
6: 6 3 89 1 9
7: 7 3 90 2 1
8: 8 3 95 3 5
9: 9 3 99 4 4


或者@jogo 在评论中提出的避免 ifelse 的变体:
dat1[, dif := t - shift(t), by = group
][index == 1, dif := t - dat2[group==.BY, start], by = group][]

关于r - 与组内或外部变量中较早实例的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49029592/

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