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

时间:2010-11-12 15:41:30

标签: sorting r dataframe

假设我有一个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 :(得分:7)

如果已经订购了“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的新因子并使用该值。

答案 1 :(得分:0)

谢谢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),]

答案 2 :(得分:0)

require(doBy)
orderBy(~ a + b + c, data=x)