我想使用ggplot2制作条形图(geom_bar
),其中id
位于x轴上,N
中的值位于y轴上。但是,我希望首先按group
排序x轴,然后按N
的降序排序。
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
答案 0 :(得分: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