这是我的数据表的样子:
library(data.table)
dt <- fread('
Product Group LastProductOfPriorGroup
A 1 NA
B 1 NA
C 2 B
D 2 B
E 2 B
F 3 E
G 3 E
')
LastProductOfPriorGroup
列是我想要的列。我正在尝试获取上一组的最后一行中的乘积。因此,在前两行中,没有先前的组,因此它是NA
。在第三行中,先前的第1组中最后一行的乘积是B
。我试图通过这样做来实现
dt[,LastGroupProduct:= shift(Product,1), by=shift(Group,1)]
无济于事。
shift(dt[, last(Product), by = Group]$V1)
,这样做会重复计算。我会选择使用dt[dt[, last(Product), by = Group][, v := shift(V1)], on="Group", newcol := i.v]
。 - Frankshifted <- shift(dt[, last(Product), Group]$V1);dt[, newcol := shifted[.GRP], by = Group]
也可以,因为它在数据表调用之外。 - Rich Scriven