对列进行动态操作(里面:=)

问题描述 投票:0回答:1

我有以下数据表

library(data.table)

df <- data.table(col1 = 1:3
                 , col2 = 2:4
                 )

我想动态操作一列,其列名存储在下面的对象中:

metric <- 'col2'

但是以下失败了

df[, `:=` (col1 = col1 - 1
           , as.name(metric) = as.numeric(get(metric))
           )
   ]

错误:

Error: unexpected '=' in:
"df[, `:=` (col1 = col1 - 1
           , as.name(metric) ="

我想在一次调用中对

col1
以及名称存储在
metric
中的任何列进行操作。 除了以下(有效)之外还有其他方法吗

df[, c('col1', metric) := .(col1 - 1
                            , as.numeric(get(metric))
                            )
   ]
r data.table
1个回答
0
投票

我认为现在执行此操作的正确方法是使用

env
,我将在作业中添加 2,以便我们可以看到它正在修改某些内容:

df[, `:=`(
    col1 = col1 - 1,
    col = as.numeric(col) + 2
), env = list(col = metric)]

df
#     col1  col2
#    <num> <num>
# 1:     0     4
# 2:     1     5
# 3:     2     6
© www.soinside.com 2019 - 2024. All rights reserved.