r - 更新 data.table 中的多列

标签 r data.table

我想用家庭调查数据更新一个大表中的几列。大约 20 个列的支出报告为负值。但是,我想要绝对值(用于生成 latex 表)。 我只能设法生成一个仅包含这些更新列的新 data.table 。这是一个例子。我只想更新第 2 列和第 3 列:

library(data.table)
test <- data.table(c(1,2,3,4),c(-2,-3,-4,-5),c(-1,-4,-5,-6),c(1,2,3,6))
test[,lapply(.SD,abs),.SDcols=2:3]

这给了我一个包含第 2 列和第 3 列的 data.table,而不是完整的 data.table。

我可以轻松地通过制作 data.frames 并使用 cbind 来做到这一点:

df1.test<-data.frame(test)[,-c(2:3)]
df2.test<-data.frame(test[,lapply(.SD,abs),.SDcols=2:3])
test<-data.table(cbind(df1.test,df2.test))

但也许 data.table 中有一种更聪明的方法。

谢谢 仁儿

最佳答案

你可以试试

test[,2:3 := lapply(.SD,abs),.SDcols=2:3][]

或者更快的方法是使用set(如@Frank建议),因为它提供了通过引用直接赋值的低开销

for(j in 2:3){
  set(test, i=NULL, j=j, value=abs(test[[j]]))
}

关于r - 更新 data.table 中的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28835597/

相关文章:

r - order data.table along numeric column puttint special Value (residual category) of other column 最后

r - 不使用apply函数对data.table的每一行进行操作的方法

r - 使用旧数据更新新数据中的值

r - rollapply() 是否允许调用函数的结果数组?

r - R在不同向量和data.frame之间的cor()行为不同

r - 将数据帧中的字符转换为时间戳

r - 对 data.table 进行高效的逐行操作

r - 扩展ggplot2中日期的轴范围

sql - R 或 SQL 中间隔的每组引用的最大 n

r - 遍历列的唯一值并创建多个列