R将水平分配给因子变量

R assign levels to factor variable

我得到了一个 Excel table 类似于:

datos <- data.frame(op= 1:4, var1= c(4, 2, 3, 2))

现在,还有其他 table 带有 opvar1 的键,它们恰好是分类变量。假设加载它们之后,它们变成:

set.seed(1)
op <- paste("op",c(1:4),sep="")
var1 <- sample(LETTERS, 19, replace= FALSE)

如您所见,数据框中有未使用的级别。我想替换适当关联级别的数字。这是我试过的:

datos[] <- lapply(datos, factor)
levels(datos$op) <- op
levels(datos$var1) <- var1

这失败了,因为它按字母顺序对因子重新排序并给出了错误的输出。然后我尝试了:

datos$var1 <- factor(datos$var1, levels= var1, ordered= TRUE)

但这会将 datos$var1 中的所有内容都设为 NA(我猜这是因为长度不匹配。

这样做的正确方法是什么?

根据@docendoDiscimus 的善意建议,我 post 这个答案以供将来参考:

对于问题中提供的数据:

datos$var1 <- factor(var1[datos$var1], levels= unique(var1))
datos
## op

请注意,应应用此解决方案 ,而不 datos$var1 转换为因子(即,不应用代码 datos[] <- lapply(datos, factor).