r - 使用列名作为 data.table 中公式的输入

标签 r data.table names

我想使用 data.table 的列名称作为公式的输入。但是,每次我直接插入行的名称时它都会起作用。如果我从对象加载名称,它将不起作用。我认为这与以下事实有关

library(data.table)
  dt <- data.table(ID= c(1,2,3,4,5,6,7,8,9),
                   var1 = c(100,150,200,180,10,15,11,25,1),
                   var2 = c(150,200,250,300,15,20,19,30,2),
                   var3 = c(100,101,102,103,104,105,106,107,109))

# Insert column name direvtly in Formular seems to work
  dt[, var1 := ( var1 - mean(var1, na.rm = TRUE)/sd(var1, na.rm = TRUE)) ]

# Load name from formular does not work
  Names <- c("var1", "var2", "var3")
   for (i in 1:3){
  dt[, Names[i] := ( Names[i] - mean(Names[i], na.rm = TRUE)/sd(Names[i], na.rm = TRUE)) ]}

我认为这与 Names[1] 给我“var1”而不是 var1 这一事实有关。我在论坛中寻找类似的问题,发现了一些命令,例如 as.symbol()as.name(),尽管它们似乎没有帮助。

最佳答案

一种选择是使用 get 从对象中获取值

for (i in 1:3){
  dt[, (Names[i]) := ( get(Names[i]) - mean(get(Names[i]),
      na.rm = TRUE)/sd(get(Names[i]), na.rm = TRUE)) ]
 }

或者另一个选项是设置

for(j in Names){
  set(dt, i = NULL, j = j, value = (dt[[j]] - mean(dt[[j]],
                    na.rm = TRUE)/sd(dt[[j]], na.rm = TRUE)))
  }
dt
#   ID         var1       var2     var3
#1:  1  99.05324836 149.060863 64.52132
#2:  2 149.05324836 199.060863 65.52132
#3:  3 199.05324836 249.060863 66.52132
#4:  4 179.05324836 299.060863 67.52132
#5:  5   9.05324836  14.060863 68.52132
#6:  6  14.05324836  19.060863 69.52132
#7:  7  10.05324836  18.060863 70.52132
#8:  8  24.05324836  29.060863 71.52132
#9:  9   0.05324836   1.060863 73.52132

或者在.SDcols中指定Names,循环遍历Data.table的子集,进行计算并赋值(;=)输出返回到 Names

中的列
dt[, (Names) := lapply(.SD, function(x) x- mean(x, na.rm = TRUE)/sd(x, 
                         na.rm = TRUE)), .SDcols = Names]

关于r - 使用列名作为 data.table 中公式的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44066665/

相关文章:

r - 什么是R赋值运算符:= for?

r - 在定义的时间段内识别组特定的定时事件

java - C++ 相当于 Java 的 this.getClass().getSimpleName();

r - 您能让 R 函数在求值时查看其自身形式的值吗?

r - 消失的按钮 - 点击后

r - 在 R 中执行 gCentroid 时出错

r - data.table:使用 colnames 通过引用赋值

r - 如何从 R 中的结构对象中提取数值

android - 为什么 Android 布局文件名如此有限?

r - ggplot2 按 y 轴的比例对分类堆叠条进行排序