我想用家庭调查数据更新一个大表中的几列。大约 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/