R将水平分配给因子变量
R assign levels to factor variable
我得到了一个 Excel table 类似于:
datos <- data.frame(op= 1:4, var1= c(4, 2, 3, 2))
现在,还有其他 table 带有 op
和 var1
的键,它们恰好是分类变量。假设加载它们之后,它们变成:
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)
.
我得到了一个 Excel table 类似于:
datos <- data.frame(op= 1:4, var1= c(4, 2, 3, 2))
现在,还有其他 table 带有 op
和 var1
的键,它们恰好是分类变量。假设加载它们之后,它们变成:
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)
.