R data.table对列的操作

R data.table对列的操作,r,data.table,R,Data.table,我想对data.table中的列列表执行一些操作。 我在这里举了一个例子。事实上,我在data.table(DT)中有大约30个变量。这就是为什么有一些行可以在我感兴趣的变量上运行循环。 由于我想保留输入DT,我用DT2复制了一份,请确保您在问题中添加了适当的语言标记。另外,我认为您只需要for(cols中的vars)DT2[,(vars):=get(vars)*variable6/variable7]。另外,不要在问题中添加恶意代码,例如rm(list=ls())。最后,请小心使用DT2 th

我想对data.table中的列列表执行一些操作。 我在这里举了一个例子。事实上,我在data.table(DT)中有大约30个变量。这就是为什么有一些行可以在我感兴趣的变量上运行循环。
由于我想保留输入DT,我用DT2复制了一份,请确保您在问题中添加了适当的语言标记。另外,我认为您只需要
for(cols中的vars)DT2[,(vars):=get(vars)*variable6/variable7]
。另外,不要在问题中添加恶意代码,例如
rm(list=ls())
。最后,请小心使用
DT2 thanky you@davidarenburg之类的东西。碰巧变量7有一些0值。然后在哪里包含一种(sapply(.SD,is.infinite)语句以避免得到很多“Inf”?顺便说一句,您还可以执行
DT2[,(cols):=lappy(.SD,`*`,variable6/variable7),.SDcols=cols]
(不带for循环)。
library(data.table)
DT <- data.table(
  variable1 = c("a", "b", "c", "d", "e"),
  variable2 = 1:5,
  variable3 = c(1, 2, 5, 6, 8),
  variable4 = c(1, 2, 5, 6, 8),
  variable5 = c(1, 2, 5, 6, 8),
  variable6 = c(12, 14, 18, 100, 103),
  variable7 = c(0.02, 0.02, 0.02, 0.02, 0.02))
cols = sapply(DT, is.numeric)
cols = cols[-c(6, 7)]
cols = names(cols)[cols]
DT2 <- DT
for(var in cols) {
  DT2[, (var)] == eval(DT[, (var)]) * eval(DT[, variable6]) / eval(DT[variable7])
}