R语言:打印/查看DataFrame时有序因子未按顺序显示的问题求助
解决DataFrame中有序因子不按顺序显示的问题
问题还原
你提到的sch.rate DataFrame里,Level列明明是有序因子,但打印出来的行顺序却没遵循预设的因子级别,当前输出如下:
print(sch.rate) # 输出: Level 15-49 married before 15 y.o. (%) 20-49 married before 15 y.o. (%) 1 Higher 17.94 16.33 2 Preschool 24.69 24.69 3 Primary 16.42 15.02 4 Secondary 8.60 7.70 20-49 married before 18 y.o. (%) 1 33.15 2 48.64 3 45.34 4 28.34
而且你已经确认Level的类和级别设置是正常的:
class(sch.rate$Level)
[1] "ordered" "factor"
为什么会这样?
其实有序因子只是定义了因子的逻辑优先级顺序,但DataFrame本身不会自动根据这个顺序来排列行——它默认还是按照数据录入的顺序或者行号来显示。咱们只需要手动对DataFrame做一次排序就行。
解决方案
方法1:用dplyr快速排序(推荐)
如果你已经装了dplyr包,用arrange()函数可以直接按有序因子的规则排序,代码很直观:
library(dplyr) # 生成排序后的新DataFrame sch.rate_sorted <- sch.rate %>% arrange(Level) # 查看结果 print(sch.rate_sorted)
方法2:基础R实现,不用额外包
要是不想加载新包,咱们可以利用有序因子的底层数值编码来排序:
# 按Level的有序因子顺序重新排列行 sch.rate_sorted <- sch.rate[order(sch.rate$Level), ] print(sch.rate_sorted)
验证结果
假设你给Level设置的级别顺序是Preschool < Primary < Secondary < Higher,排序后的输出应该会变成符合逻辑的顺序:
Level 15-49 married before 15 y.o. (%) 20-49 married before 15 y.o. (%) 20-49 married before 18 y.o. (%) 2 Preschool 24.69 24.69 48.64 3 Primary 16.42 15.02 45.34 4 Secondary 8.60 7.70 28.34 1 Higher 17.94 16.33 33.15
小提示
如果你希望之后操作这个DataFrame时都保持正确顺序,可以直接把排序后的结果覆盖原变量:
sch.rate <- sch.rate[order(sch.rate$Level), ]
内容的提问来源于stack exchange,提问作者Manolo
相关产品推荐
相关产品推荐

