我们说我有以下数据。表。
dt = data.table(one=rep(2,4), two=rnorm(4))
dt
现在我创建了一个名称为一列的变量。
col_name = "one"
如果我想将该列作为data.table返回,我可以执行以下操作之一。第一个选项将列名称返回为V1,第二个选项实际上将列名称设置为"一个"。
dt[,.(get(col_name))]
dt[,col_name, with=FALSE]
我想知道是否有办法使用get命令指定列名。像下面的东西,它不起作用。
dt[,as.symbol(col_name) = .(get(col_name))]
我需要带有get的列名的原因是我有非常广泛的循环,我填写空列。所以它最终看起来像这样,我循环并用cols中的列替换imp_val和中位数。
dat2[is.na(get(imp_val)),
as.symbol(imp_val) := dat2[.BY, median(get(imp_val), na.rm=TRUE), on=get(cols)], by=c(get(cols))]
答案 0 :(得分:0)
我们可以在{% for order in customer.orders %}
{{ order.id }}
{% endfor %}
.SDcols
或dt[, .SD,.SDcols = col_name]
..
如果打算将列重命名为'col_name'
dt[, ..col_name]
答案 1 :(得分:0)
你也可以使用tidyverse方法。设置:
library(data.table)
library(magrittr)
library(dplyr)
dt = data.table(one=rep(2,4), two=rnorm(4))
col_name = "one"
然后将select
与非标准评估运算符!!
(发音为bang-bang)一起使用:
> dt %>% dplyr::select(!!col_name)
one
1: 2
2: 2
3: 2
4: 2
返回的对象仍然是data.table
:
> dt %>%
dplyr::select(!!col_name) %>%
class
[1] "data.table" "data.frame"
我不清楚你的问题的第二部分是用中位数代替NA的意思。也许你可以用一个小例子来更新你的答案?