您的位置:首页 > 其它

R 对分组的数据进行排序

2018-03-26 20:19 148 查看
朋友要给以月为单位的时间序列数据分组然后按其中一个feature再进行排序。链家的一个面试题也要求对一个地区的数据进行分组然后排序。于是研究了一下怎么弄。

数据使用R内建的数据集 ChickWeight
> data=ChickWeight
> head(data)
  weight Time Chick Diet
1     42    0     1    1
2     51    2     1    1
3     59    4     1    1
4     64    6     1    1
5     76    8     1    1
6     93   10     1    1
>summary(data)
     weight           Time           Chick     Diet   
 Min.   : 35.0   Min.   : 0.00   13     : 12   1:220  
 1st Qu.: 63.0   1st Qu.: 4.00   9      : 12   2:120  
 Median :103.0   Median :10.00   20     : 12   3:120  
 Mean   :121.8   Mean   :10.72   10     : 12   4:118  
 3rd Qu.:163.8   3rd Qu.:16.00   17     : 12          
 Max.   :373.0   Max.   :21.00   19     : 12          
                                 (Other):506 

方法一,排序完再分组
#直接使用order命令传入第一分组参数,和第二分组参数。会直接返回以第一参数分组后再以第二参数分组的数据
>sdata=data[order(data$Diet,data$weight),]
#直接使用排序后的数据进行分组,因为weight是第二排序依据,所以分组后的数据也已经完成了分组
>result=split(data,data$Diet)

或者可以使用doBy包的orderBy进行操作,效果一样。本身orderBy方法就warp了order方法
>library("doBy")
>result=orderBy(~Diet+weight, data)
>result2=split(data,data$Diet)

方法二,分组后排序
#直接进行分组,分组后的weight数据列没有经过排序,生成了一个weight为无序状态的含有4个dataframe的list
>sdata=split(data,data$Diet)
#使用lapply对list里的每个元素(依照diet分组过后的数据)进行order操作,生成排序过的元素,注意order后面那个都好不要丢
>result=lapply(sdata,function(x) x[order(x[,1]),])
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: