R语言中因子转数值的异常现象原因求助
R语言因子转换异常的原因
先搞懂R里因子的本质:因子不是字符向量,也不是数值向量,它是「带字符标签的整数向量」——底层存储的是整数(对应因子水平的排序位置),你看到的数字其实是它的标签,不是实际存储的值。
逐个拆解你写的三个转换:
fac |> as.numeric(as.character()):这是管道操作的写法出错了!R的|>是把左边的结果传给右边函数的第一个参数,所以这句实际等价于as.numeric(fac, as.character()),但as.numeric根本用不上第二个参数,直接忽略后等同于执行as.numeric(fac)——取的是因子底层的整数编码(1、2、3,对应三个水平的位置),所以得到错误结果。fac |> as.numeric() |> as.character():先把因子转成底层整数(1、2、3),再把这些整数转成字符,自然得到c("1","2","3")。fac |> as.character() |> as.numeric():先把因子转成它显示的标签字符("2","3","4"),再把这些字符转成数值,所以得到正确的c(2,3,4)。
总结下:因子转数值的正确姿势是先转字符再转数值,管道操作要注意顺序,别写错参数传递方式。
内容的提问来源于stack exchange,提问作者Joezerz
相关产品推荐
相关产品推荐

