【问题标题】:Updating multiple columns in data.table更新 data.table 中的多个列
【发布时间】:2015-05-04 07:52:33
【问题描述】:

我想用家庭调查数据更新大表中的几列。大约 20 列的支出报告为负值。但是,我想要绝对值(用于生成乳胶表)。 我只设法生成一个只有这些更新列的新 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 中有更聪明的方法。

谢谢 伦格

【问题讨论】:

  • 可以使用dplyr包library(dplyr); test &lt;- test %&gt;% mutate(V2 = abs(V2), V3=abs(V3))
  • 您熟悉:= 运算符吗?

标签: r data.table


【解决方案1】:

你可以试试

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]]))
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-20
    • 2015-07-28
    • 2016-10-09
    • 2015-04-08
    • 2019-07-24
    • 2018-08-03
    • 1970-01-01
    相关资源
    最近更新 更多