我经常想一次处理 data.table 的一行。我一直在用
d[, j, by=rownames(d)]
Run Code Online (Sandbox Code Playgroud)
但这似乎并不总是有效(有时会通过似乎对列名求值来获得错误消息),并且在任何情况下都不是我想要做的事情的一个非常清晰的表达。
让我举一个具体的例子。
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]
Run Code Online (Sandbox Code Playgroud)
情况是我有一个未矢量化的函数 f 。我用 id 列装饰了 d,所以我可以一次处理一行。我正在寻找一种更好的方法来做到这一点。
这是另一个例子,没有函数 f:
d[, list(a=a,b=b,s=a:b), by = id]
d[, id := NULL]
Run Code Online (Sandbox Code Playgroud)
小智 0
按照我在https://arelbundock.com/posts/datatable_rowwise/找到的示例,这似乎可以完成这项工作
# Your example data frame and function
d = data.table(a = c(1, 2), b = c(3, 4))
f <- function(x, y) {x[1] + y[1]}
# Try the Map() function for row-wise operations
d[, z := Map(f, a, b)]
Run Code Online (Sandbox Code Playgroud)
产生
#> a b z
#> 1: 1 3 4
#> 2: 2 4 6
Run Code Online (Sandbox Code Playgroud)