r - 使用变量指定 `data.table` 范围内的列名

标签 r data.table

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

举个例子,我可能有一个名为 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 解决了这个问题。是否有类似的转换解决方案? 或者,我更想要的是,是否有一个通用的解决方案来使用变量的内容而不是变量名称?

最佳答案

数据:

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

关于r - 使用变量指定 `data.table` 范围内的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28430135/

相关文章:

r - 将函数应用于循环中的所有行并将结果放入新列中

R:计算指定时间范围内不同类别的数量

python - R中的数据重排

r - 使用 .SD 和 by 的 data.table 性能

r - 转置 data.table(列名称 -> 输出的第一列)

r - 仅当另一列中的相应值在 r 中也重复时,才提取一列中具有重复值的行

r - 将小数年份和一年中的某一天转换为 R 中的日期

r - 为 RStudio Server 1.0.44 配置日志目录

R - 条形图覆盖不同宽度的条形

r - 为什么 `pivot_wider` 在 `data.table` 上不起作用