【问题标题】:Using a variable to specify a column name within `data.table`使用变量在 `data.table` 中指定列名
【发布时间】:2015-02-10 11:07:49
【问题描述】:

我想在对列进行操作时使用变量来指定列的名称。

举个例子,我可能有一个名为Set1 的data.table,我想在其中将x 列的类更改为数字。我可能会这样做

Set1New=transform(Set1,x=as.numeric(x))

这可行,但现在我不想硬编码列名,而是使用变量,我们称之为Y(之前定义为Y="x"

当我使用时,如何告诉 R 使用变量的内容而不是寻找列 Y

Set1New=transform(Set1,Y=as.numeric(Y))

我知道,例如setkeysetkeyv 存在,setkeyv 解决了这个问题。是否有类似的转换解决方案? 或者,我更想要的是,有没有通用的解决方案,使用变量的内容而不是变量名?

【问题讨论】:

  • 如果是data.table,那么Set1[, x:=as.numeric(x)]
  • 您可能正在寻找Set1[, (Y) := as.numeric(get(Y))]。一般来说,如果您已经在使用data.table,那么Set1New=transform(.. 之类的操作将首先使用它。您应该阅读一些关于 NSE 和参考分配的 data.table 文档。更具体地看herehere
  • 或者你可以使用eval Set1[,(Y) := as.numeric(eval(as.name(Y)))]
  • @DavidArenburg 我一定会这样做的!
  • 也看看here

标签: r data.table


【解决方案1】:

数据

library(data.table)
dt = data.table(col1=letters[1:2], x=c('1','2'))

一种解决方案是在您的data.table 中使用quoteeval

y = quote(x)
dt[,eval(y):=as.numeric(eval(y))]

#> is.numeric(dt$x)
#[1] TRUE

【讨论】:

  • 评估错误(expr,envir,enclos):找不到对象'x'
猜你喜欢
  • 2016-03-30
  • 2012-09-18
  • 2017-10-24
  • 1970-01-01
  • 2021-05-13
  • 2017-03-27
  • 2013-04-27
  • 1970-01-01
相关资源
最近更新 更多