R语言factor(x, levels, labels)返回意外<NA>的问题及解决咨询
问题原因
你遇到的NA是因为factor()函数的levels参数定义了新因子的合法水平集合,你的t_fac元素是"A",但指定的levels = t_lev对应的水平是"B"和"C","A"不在这个集合内,所以被转换为NA。
解决方案
以下几种思路可以得到你预期的结果:
直接修改原因子的标签
如果你只需要把原因子的水平"A"替换为标签1,直接修改原因子的levels属性即可:t_fac <- factor(c("A", "A")) levels(t_fac) <- 1 t_fac执行结果:
[1] 1 1 Levels: 1重新构造因子时包含原水平
如果你一定要用factor()重新生成,需要把原因子的水平"A"加入到levels参数中,再对应设置标签:t_fac <- factor(c("A", "A")) t_lev <- factor(c("B", "C")) t_lab <- c(1, 1) # 将"A"加入levels,对应标签1,其余t_lev的水平也用t_lab的标签 factor(t_fac, levels = c("A", levels(t_lev)), labels = c(1, t_lab))如果你不需要保留
t_lev的水平,直接指定levels为原因子的水平即可:factor(t_fac, levels = "A", labels = 1)直接生成目标因子
如果你的需求是让所有元素都显示为1,且水平只有1,完全可以直接构造新因子:t_fac <- factor(c("A", "A")) factor(rep(1, length(t_fac)), levels = 1)
内容的提问来源于stack exchange,提问作者Marro
相关产品推荐
相关产品推荐

