R语言按指定列排序dataframe时结果无变化的问题咨询
问题成因
R中对因子类型变量执行as.numeric()转换时,默认取的是因子内部存储的整数编码,而非因子标签对应的文本数值。你提供的Week列的因子层级(.Label)默认是按字符串字典序排列的:c("1", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2", "20", "3", "4", "5", "6", "7", "8", "9"),对应的内部编码正好是1到20,因此as.numeric(Week)得到的就是1到20的顺序序列,order()之后的索引和原数据顺序完全一致,所以排序没有生效。
正确实现方法
你只需要先把因子转为字符类型,再转为数值类型参与排序即可,修改后的代码如下:
Actualdf2<-Actualdf2[ with(Actualdf2, order(as.numeric(as.character(Week)))), ]
如果后续也需要按周的数字顺序做其他操作,也可以直接把Week列转为层级符合数字顺序的因子,一劳永逸:
# 修正Week列的因子层级顺序 levels(Actualdf2$Week) <- sort(as.numeric(levels(Actualdf2$Week))) # 后续直接按Week排序即可得到数字顺序的结果 Actualdf2 <- Actualdf2[order(Actualdf2$Week), ]
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

