我经常想一次处理一行data.table。我一直在使用
d[, j, by=rownames(d)]
但这似乎并不总是有效(有时通过出现评估列名来获得错误消息),并且在任何情况下都不是我想要做的非常干净的表达。
让我举一个具体的例子。
d = data.table(a=c(1,2),b=c(3,4))
f = function(x,y) x[1]+y[1] #expects length 1 vectors x and y and adds them
d[, id := 1:.N]
d[, f(a,b), by=id]
d[, id := NULL]
情况是我有一个没有矢量化的函数f。我用id列装饰了d,所以我可以一次处理一行。我正在寻找一种更好的方法来做到这一点。
这是另一个例子,没有函数f:
d[, list(a=a,b=b,s=a:b), by = id]
d[, id := NULL]