在 R data.table 中每组获取一行

Dav*_*idR 6 r data.table

我经常想一次处理 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)