RStudio中按avg列排序data.frame时如何保持整行数据同步排序
R语言按指定列升序排序数据框(保证行数据不错配)
你只要通过整行索引重排的方式排序,就不会出现同一行不同列数据错配的问题,所有列会跟随行顺序同步调整,完全满足每行对应同一位人员全部数据的要求,下面给两种最常用的实现方式:
基础R实现(无需安装任何包,全版本兼容)
用R内置的order()函数拿到avg列升序对应的原行位置序列,直接用这个序列重排数据框即可,代码如下:# 按avg列升序排序,结果可存到新变量,也可以直接赋值给原变量覆盖 BAPlotDET_sorted <- BAPlotDET[order(BAPlotDET$avg), ]原理很简单:
order(BAPlotDET$avg)会返回一组行号,对应avg列值从小到大排列时,每一位应该取原数据的第几行,用这组行号提取数据框行的时候,是整行整行搬位置,自然不会把同一行的5个字段拆乱。如果后续需要降序排序,只要写成order(-BAPlotDET$avg)就行。dplyr实现(适合习惯用tidyverse语法的场景)
如果日常用tidyverse系列包做数据处理,可以直接用dplyr的arrange()函数,写法更简洁:# 没装dplyr的话先跑 install.packages("dplyr") library(dplyr) # 按avg升序排序 BAPlotDET_sorted <- BAPlotDET %>% arrange(avg)arrange()默认对传入的列做升序排列,底层也是整行重排,不会破坏行内数据的对应关系,需要降序的话写成arrange(desc(avg))即可。
避坑提醒:千万不要只单独把
avg列抽出来排序再赋值回原数据框的avg列,这种操作才会导致列数据错位。排序完成后可以随机抽3-5行,对比原数据中对应人员的5个字段值,确认匹配无误后再做后续分析。
内容的提问来源于stack exchange,提问作者C K
相关产品推荐
相关产品推荐

