在给定列名的字符向量类似于this link的情况下,我试图找出在data.table中删除未使用的因子级别的语法。但是,在该示例中,“ y”是数据表“ x”的实际列名。我想传递一个包含列名的字符向量,但是我无法弄清楚语法。
答案 0 :(得分:3)
我们可以使用.SDcols
来指定感兴趣的列。它可以采用列名称(长度为1或大于1)或列索引的向量。现在,.SD
,即Data.table的子集将具有在.SDcols
中指定的那些列。因为只有一列,所以用[[
提取该列,在droplevels
上应用vector
,然后将其分配(:=
)到感兴趣的列。不是对象标识符v1周围的括号。它是对对象求值以获取其中的值,而不是创建列“ v1”
x[, (v1) := droplevels(.SD[[1]]), .SDcols = v1]
通常,语法为
x[, (v1) := lapply(.SD, droplevels), .SDcols = v1]
它可以占用一列或多列。提取([[
)的唯一原因是因为我们知道它是单列
另一个选项是get
x[, (v1) := droplevels(get(v1))]
其中
v1 <- "y"
答案 1 :(得分:1)
@akrun的答案很好用,我认为这也可行
x[, (v1):=droplevels(x[[v1]])]