使用变量指定 `data.table` 中的列名
Using a variable to specify a column name within `data.table`
我想在对列进行操作时使用变量来指定列名。
举个例子,我可以有一个名为 Set1
的 data.table,我想在其中将 x
列的 class 更改为数字。我可能会
Set1New=transform(Set1,x=as.numeric(x))
这会起作用,但现在我不想对列名进行硬编码,而是使用一个变量,我们称它为 Y
(之前定义为 Y="x"
。
当我使用
时,如何告诉 R 使用变量的内容而不是查找列 Y
Set1New=transform(Set1,Y=as.numeric(Y))
我知道,例如setkey
和 setkeyv
存在,其中 setkeyv
解决了这个问题。是否有类似的转换解决方案? 或者,我更想要的是,是否有使用变量内容而不是变量名称的通用解决方案?
数据:
library(data.table)
dt = data.table(col1=letters[1:2], x=c('1','2'))
一个解决方案是在 data.table
:
中使用 quote
和 eval
y = quote(x)
dt[,eval(y):=as.numeric(eval(y))]
#> is.numeric(dt$x)
#[1] TRUE
我想在对列进行操作时使用变量来指定列名。
举个例子,我可以有一个名为 Set1
的 data.table,我想在其中将 x
列的 class 更改为数字。我可能会
Set1New=transform(Set1,x=as.numeric(x))
这会起作用,但现在我不想对列名进行硬编码,而是使用一个变量,我们称它为 Y
(之前定义为 Y="x"
。
当我使用
时,如何告诉 R 使用变量的内容而不是查找列Y
Set1New=transform(Set1,Y=as.numeric(Y))
我知道,例如setkey
和 setkeyv
存在,其中 setkeyv
解决了这个问题。是否有类似的转换解决方案? 或者,我更想要的是,是否有使用变量内容而不是变量名称的通用解决方案?
数据:
library(data.table)
dt = data.table(col1=letters[1:2], x=c('1','2'))
一个解决方案是在 data.table
:
quote
和 eval
y = quote(x)
dt[,eval(y):=as.numeric(eval(y))]
#> is.numeric(dt$x)
#[1] TRUE