R 正在删除data.table中未使用的因子级别

R 正在删除data.table中未使用的因子级别,r,R,我正试图找出删除data.table中未使用的因子级别的语法,给定一个类似于中所做操作的列名字符向量。但是,在该示例中,“y”是data.table“x”的实际列名。我想传递一个包含列名的字符向量,但我无法理解语法 我们可以使用.SDcols指定感兴趣的列。它可以采用列名称向量(长度为1或大于1)或列索引。现在,.SD即Data.table的子集将在.SDcols中指定这些列。由于只有一列,请使用[[提取该列,在向量上应用液滴,并将(:=)分配回感兴趣的列。而不是对象标识符v1周围的参数。这是为

我正试图找出删除data.table中未使用的因子级别的语法,给定一个类似于中所做操作的列名字符向量。但是,在该示例中,“y”是data.table“x”的实际列名。我想传递一个包含列名的字符向量,但我无法理解语法

我们可以使用
.SDcols
指定感兴趣的列。它可以采用列名称向量(长度为1或大于1)或列索引。现在,
.SD
即Data.table的子集将在
.SDcols
中指定这些列。由于只有一列,请使用
[[
提取该列,在
向量上应用
液滴
,并将(
:=
)分配回感兴趣的列。而不是对象标识符v1周围的参数。这是为了计算对象以获取其中的值,而不是创建列“v1”

x[, (v1) := droplevels(.SD[[1]]), .SDcols = v1]
通常,语法是

x[, (v1) := lapply(.SD, droplevels), .SDcols = v1]
它可以是一列或多列。提取(
[[
)的唯一原因是因为我们知道它是一列

另一个选项是
get

x[, (v1) :=  droplevels(get(v1))]
在哪里,

v1 <- "y"

v1@akrun的答案很有效,我认为这也很有效


x[,(v1):=droplevels(x[[v1]])]

你能详细说明一下[[1]]在做什么吗?@Yandle无法为我重现这个问题
x[,(v1):=droplevels(.SD),.SDcols=v1];levels(x$y)#[1]“a”“b”“c”“d”“e”
droplevels
用于data.frame或vector,但某些函数无法以这种方式工作。您可以尝试创建示例数据吗again@Yandle正如我提到的,每个函数都有一个特定的行为,
factor
作用于
vector
,而不是data.frame或data。table@Yandle基于
?系数
<代码>x-数据向量,通常采用少量不同的值。