2015-10-16 52 views
0

我想使用ggplot2製作條形圖(geom_bar),其中id位於x軸上,而N中的值位於y軸上。但是,我希望x軸首先按group排序,然後按N的降序排序。以兩列排列條形圖中的x軸元素

id N group 
1  1 A 
2  2 A 
3  1 A 
4  5 A 
5  2 A 
6  3 B 
7  15 B 
8  4 B 
9  15 C 
10 1 C 

id柱水平將是:

Levels: 4, 2, 5, 3, 1, 7, 8, 6, 9, 10 

我能夠用下面的重新排序的數據表中的期望的順序(除了N是升序);但是,它不會改變的id的水平,這似乎有需要改變順序id繪製在x軸上:

dt <- dt[with(dt, order(group, factor(N, order(group)))), ]

下面是我要找的順序的表示。

id N group 
4  5 A 
2  2 A 
5  2 A 
3  1 A 
1  1 A 
7  15 B 
8  4 B 
6  3 B 
9  15 C 
10 1 C 

回答

1

關鍵是要安排'id'列的等級。

id <- 1:10 
N <- c(1,2,1,5,2,3,15,4,15,1) 
group <- c(rep("A", 5), rep("B", 3), rep("C", 2)) 

df <- data.frame(id, N, group, stringsAsFactors = FALSE) 

df$id <- factor(df$id, levels=df$id[order(df$group, -df$N)]) 
df 
# id N group 
# 1 1 1  A 
# 2 2 2  A 
# 3 3 1  A 
# 4 4 5  A 
# 5 5 2  A 
# 6 6 3  B 
# 7 7 15  B 
# 8 8 4  B 
# 9 9 15  C 
# 10 10 1  C 
df$id 
# [1] 1 2 3 4 5 6 7 8 9 10 
# Levels: 4 2 5 1 3 7 8 6 9 10