使用 .SD 检索 lapply 内的列名

标签 r data.table

我想对 data.table 中的所有列应用一个函数。因此,我将 .SD 与 lapply 一起使用。但是,在 lapply 中,我无法检索表的列。

例如

x = data.table(a=1:10, b=10:1, id=1:5)
x[,lapply(.SD,function(t){t*id}),.SDcols=c(1,2)]
Error in ..FUN(a) : object 'id' not found

我执行以下操作:
x[,lapply(.SD,function(t){t*x$id}),.SDcols=c(1,2)]

我们能做得更好吗?

最佳答案

只需删除 .SDcols=c(1,2) .删除第三列( id )

 > x[,lapply(.SD,function(t){t*id})]
     a  b id
 1:  1 10  1
 2:  4 18  4
 3:  9 24  9
 4: 16 28 16
 5: 25 30 25
 6:  6  5  1
 7: 14  8  4
 8: 24  9  9
 9: 36  8 16
10: 50  5 25

没有 id ,以下所有内容都将起作用:
x[,lapply(.SD[,list(a,b)], `*`, id)]

x[,lapply(.SD[,-3], `*`, id)]

x[,lapply(.SD, `*`,id)][, list(a,b)]

关于使用 .SD 检索 lapply 内的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17420132/

相关文章:

r - 使用 plotCI 绘图时缩放轴刻度标签的问题

r - dplyr if else 没有 else

r - 使用 R 从数据帧构建名称向量

r - 按组和逻辑表达式对行进行子集化 - data.table

r - 在控制台输出的小标题中显示所有列

r - 如何用 R 找到回归线上的最低值和最高值?

string - 使用data.table,在某些字符之间返回到一个新列

使用 data.table 包 reshape 数据

r - 在 v1.8.3 之前,在 R {data.table} 中使用 `:=` 时如何抑制输出?

R 对象引用计数