在R中对数据进行排序

Meh*_*lar 5 sorting r dataframe

我有一个数据框,在R中有900,000行和11列.列名和类型如下:

column name: date / mcode / mname / ycode / yname / yissue  / bsent   / breturn / tsent   / treturn / csales
type:        Date / Char  / Char  / Char  / Char  / Numeric / Numeric / Numeric / Numeric / Numeric / Numeric
Run Code Online (Sandbox Code Playgroud)

我想按以下顺序按这些变量对数据进行排序:

  1. 日期
  2. 的MCode
  3. ycode
  4. yissue

级别的顺序在这里很重要,即它们应该首先按日期排序,如果有相同的日期,它们应该按mcode排序,依此类推.我怎么能在R?

小智 11

也许是这样的?

> df<- data.frame(a=rev(1:10), b=rep(c(2,1),5), c=rnorm(10))
> df
    a b           c
1  10 2 -0.85212079
2   9 1 -0.46199463
3   8 2 -1.52374565
4   7 1  0.28904717
5   6 2 -0.91609012
6   5 1  1.60448783
7   4 2  0.51249796
8   3 1 -1.35119089
9   2 2 -0.55497745
10  1 1 -0.05723538
> with(df, df[order(a, b, c), ])
    a b           c
10  1 1 -0.05723538
9   2 2 -0.55497745
8   3 1 -1.35119089
7   4 2  0.51249796
6   5 1  1.60448783
5   6 2 -0.91609012
4   7 1  0.28904717
3   8 2 -1.52374565
2   9 1 -0.46199463
1  10 2 -0.85212079
Run Code Online (Sandbox Code Playgroud)

"order"函数可以将几个向量作为参数.

  • 你也可以在一个参数的前面添加一个 - 以升序排序,而不是仅为该标准降序,例如,order(df $ b,-df $ a,df $ c). (5认同)

Ram*_*ath 8

在早期解决方案的基础上,这里有另外两种方法.第二种方法需要plyr.

df.sorted = df[do.call(order, df[names(df)]),];
df.sorted = arrange(df, a, b, c) 
Run Code Online (Sandbox Code Playgroud)