R语言中如何调整table输出的分类变量显示顺序?
问题描述
处理R语言中的dat.stat.can.21数据集时,创建income.recode分类变量,初始代码如下:
dat.stat.can.21$income.recode <- rep("40-99", length = dim(dat.stat.can.21)[1]) dat.stat.can.21$income.recode[dat.stat.can.21$HHInc < 13] <- c("0-40") dat.stat.can.21$income.recode[dat.stat.can.21$HHInc > 24 & dat.stat.can.21$HHInc < 34] <- c("100+") table(dat.stat.can.21$income.recode)
运行table()后的输出为:
0-40 100+ 40-99 34670 200806 111532
希望将table输出的类别顺序调整为0-40、40-99、100+,于是修改赋值逻辑:
dat.stat.can.21$income.recode <- rep("0-40", length = dim(dat.stat.can.21)[1]) dat.stat.can.21$income.recode[dat.stat.can.21$HHInc > 12 & dat.stat.can.21$HHInc < 25] <- c("40-99") dat.stat.can.21$income.recode[dat.stat.can.21$HHInc > 24 & dat.stat.can.21$HHInc < 34] <- c("100+") table(dat.stat.can.21$income.recode)
但table()输出的类别顺序仍未改变,如何解决?
解决方案
R中字符类型的向量在table()中默认按字母顺序排序,修改赋值顺序不会改变这一逻辑。要自定义类别顺序,需将income.recode转换为因子(factor),通过levels参数指定顺序:
方法1:将变量转为因子(永久生效)
完成赋值后,把字符向量转为因子并设定顺序:
# 执行你的赋值逻辑(两种写法均可) dat.stat.can.21$income.recode <- rep("40-99", nrow(dat.stat.can.21)) dat.stat.can.21$income.recode[dat.stat.can.21$HHInc < 13] <- "0-40" dat.stat.can.21$income.recode[dat.stat.can.21$HHInc > 24 & dat.stat.can.21$HHInc < 34] <- "100+" # 转换为因子并指定顺序 dat.stat.can.21$income.recode <- factor( dat.stat.can.21$income.recode, levels = c("0-40", "40-99", "100+") ) # 查看结果 table(dat.stat.can.21$income.recode)
方法2:在table调用中临时调整顺序(不修改原变量)
如果不想改变原变量类型,可在调用table()时临时转为因子:
table( factor(dat.stat.can.21$income.recode, levels = c("0-40", "40-99", "100+")) )
两种方法都会输出符合预期的结果:
0-40 40-99 100+ 34670 111532 200806
内容的提问来源于stack exchange,提问作者It's lighthouse
相关产品推荐
相关产品推荐

