数据表:在.SD中创建新列,同时保留旧列

时间:2019-01-30 14:33:17

标签: r data.table

我已经使用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 []中添加一列?还是告诉操作保留所有现有列?谢谢!

0 个答案:

没有答案
相关问题