为何字符列转换为有序因子时全部变为NA而非因子?
问题
我有一个包含字符列的数据框,尝试将该列转换为有序因子,但使用factor()函数时整列会被转为NA,删除labels参数后就能正常运行。
出错的代码:
data[3] <- factor(data[3], levels = c(1:4), labels = c("Ensino médio completo", "Ensino superior incompleto","Ensino superior completo","Pós-graduado"), ordered = T)
这段代码会让目标列全部变为NA;而以下代码可以正常运行:
data[3] <- factor(data[3], levels = c("Ensino médio completo", "Ensino superior incompleto", "Ensino superior completo","Pós-graduado"), ordered = T)
错误原因
factor()函数的levels参数是用来指定原数据列中实际存在的取值,而非你想要替换成的新标签对应的编码。- 你的原数据列是字符串类型,内容是
"Ensino médio completo"这类文本,但第一个代码里把levels设为了c(1:4)——原数据中根本没有1、2、3、4这些数值,函数找不到任何匹配的取值,因此所有元素都被判定为“不属于指定levels”,最终全部转为NA。 - 第二个代码里
levels直接使用了原数据中存在的字符串值,函数能正确匹配每个元素,所以可以正常生成有序因子;如果需要用数字对应文本标签,得先确保原数据列里是1-4的数值,再通过labels参数替换成文本。
内容的提问来源于stack exchange,提问作者Pedro Henrique Arraes
相关产品推荐
相关产品推荐

