我已经使用R的data.table功能成功创建了一个新列。但是,我在逻辑中对.SD []的用法似乎已经消除了我使用':='符号添加新列的能力,这意味着我现在必须显式列出输出中的每一列。
您可以在下面查看我的代码:
test <- data[, {
presentnugget = nuggetid
.SD[, .(futurebuddy = shift(sessionid[nuggetid == presentnugget], type = "lead"))]}, by = c("userid")]
总的来说,该逻辑按“用户ID”对数据进行分组,然后针对分组中的每一行,期待与当前行具有相同“金块”的行。然后,它获取匹配行的“ sessionid”,并将其附加到“ futurebuddy”列下的当前行。
单个组的输出:
userid futurebuddy
2d44d548-7de0-4dc9-b874-ad62d72b688d 5c16ba6de6abe300010ec6d7
2d44d548-7de0-4dc9-b874-ad62d72b688d 5c16bb633bee360001a809aa
2d44d548-7de0-4dc9-b874-ad62d72b688d 5c4f4803ffe02000017d1104
2d44d548-7de0-4dc9-b874-ad62d72b688d 5c4f5461ffe02000017d5853
2d44d548-7de0-4dc9-b874-ad62d72b688d 5c07c9bab2dab300010f14c0
我的问题是'data'对象中存在的所有先前列现在都消失了。当我尝试使用':='运算符时:
data[, {
presentnugget = nuggetid
.SD[, futurebuddy := shift(sessionid[nuggetid == presentnugget], type = "lead")]}, by = c("userid")]
它告诉我:
.SD is locked. Using := in .SD's j is reserved for possible future use; a tortuously flexible way to modify by group. Use := in j directly to modify by group by reference.
有什么方法可以在.SD []中添加一列?还是告诉操作保留所有现有列?谢谢!