R 对分组的数据进行排序

朋友要给以月为单位的时间序列数据分组然后按其中一个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]),])



你可能感兴趣的:(R)