首页 文章

如何使用指定的列顺序保存对R中的数据框进行排序?

提问于
浏览
7

假设我有一个data.frame

x <- data.frame(a = c('A','A','A','A','A', 'C','C','C','C', 'B','B','B'),
                b = c('a','c','a','a','c', 'd', 'e','e','d', 'b','b','b'),
                c = c( 7,  3,  2,  4,  5,   3,   1,  1,  5,   5,  2,  3),
                stringsAsFactors = FALSE)

> x
   a b c
1  A a 7
2  A c 3
3  A a 2
4  A a 4
5  A c 5
6  C d 3
7  C e 1
8  C e 1
9  C d 5
10 B b 5
11 B b 2
12 B b 3

我想按列b和c排序x,但保持a的顺序和以前一样 . x[order(x$b, x$c),] - 中断列a的顺序 . 这就是我要的:

a b c
3  A a 2
4  A a 4
1  A a 7
2  A c 3
5  A c 5
6  C d 3
9  C d 5
7  C e 1
8  C e 1
11 B b 2
12 B b 3
10 B b 5

有一个快速的方法吗?

目前我运行“for”循环并对每个子集进行排序,我敢肯定必须有更好的方法 .

谢谢!伊利亚

3 回答

  • 0

    如果已经订购了列“a”,那么这很简单:

    > x[order(x$a,x$b, x$c),]
       a b c
    3  A a 2
    4  A a 4
    1  A a 7
    2  A c 3
    5  A c 5
    6  B d 3
    9  B d 5
    7  B e 1
    8  B e 1
    11 C b 2
    12 C b 3
    10 C b 5
    

    如果列a未排序(但已分组),请创建一个具有x $ a级别的新因子并使用该因子 .

  • 7

    谢谢Spacedman!你的推荐很有效 .

    x$a <- factor(x$a, levels = unique(x$a), ordered = TRUE)
    x[order(x$a,x$b, x$c),]
    

    继Gavin的评论之后

    x$a <- factor(x$a, levels = unique(x$a))
       x[order(x$a,x$b, x$c),]
    
  • 0
    require(doBy)
    orderBy(~ a + b + c, data=x)
    

相关问题