R语言中factor函数为何丢弃向量指定水平?如何保留空水平?
R语言因子保留空水平的问题解决
问题原因
你直接给字符向量x手动添加levels属性,本质只是给这个字符向量附加了一个额外属性,并没有把它转换成因子类型。而factor()函数的默认行为是:仅提取输入向量中实际存在的唯一值作为因子水平,所以你手动添加的不存在的d会被自动过滤掉,导致调用factor(x)后看不到这个空水平。
解决方法
有两种简单的处理方式:
方式1:直接生成带指定水平的因子
如果一开始就需要包含空水平的因子,直接在创建时通过levels参数指定所有需要的水平:
x <- factor(c('a', 'a', 'b', 'b', 'c', 'c'), levels = c('a', 'b', 'c', 'd'))
此时直接查看x就能看到包含d的所有水平:
> x [1] a a b b c c Levels: a b c d
方式2:基于已有向量转换时保留自定义水平
如果已经给字符向量添加了levels属性,转换因子时手动指定levels参数为原向量的levels即可:
x <- c('a', 'a', 'b', 'b', 'c', 'c') levels(x) <- c('a', 'b', 'c', 'd') # 转换时指定levels为原向量的levels属性 x_factor <- factor(x, levels = levels(x))
查看结果:
> x_factor [1] a a b b c c Levels: a b c d
内容的提问来源于stack exchange,提问作者Banach
相关产品推荐
相关产品推荐

