删除data.table中未使用的因子水平

时间:2019-02-10 22:30:09

标签: r

在给定列名的字符向量类似于this link的情况下,我试图找出在data.table中删除未使用的因子级别的语法。但是,在该示例中,“ y”是数据表“ x”的实际列名。我想传递一个包含列名的字符向量,但是我无法弄清楚语法。

2 个答案:

答案 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]])]