我正在总结一个按两个变量分组的数据集。最近,我学习了如何根据主分组变量的总计数重新排序条形图。现在我想要生成一个重新排序的数据表,以匹配重新排序的条形图。下面是我对条形图的看法:
library(magrittr)
library(dplyr)
df <- mtcars
df$gear <- as.factor(df$gear)
df$carb <- as.factor(df$carb)
car_summary <- df %>% group_by(carb, gear) %>% summarize(Count = n())
ggplot(data = car_summary, aes(x = reorder(carb, Count, sum), y = Count, fill = gear)) +
geom_col() + coord_flip() + labs(x = "carb", y = "Count")
然后,如果我试图生成一个表,并按照生成该图的方式对数据进行汇总,我将得到如下结果:
summary_table <- df %>% group_by(carb, gear) %>% summarize(Count = n())
summary_table
然而,这给了我以下输出:
> summary_table
# A tibble: 11 x 3
# Groups: carb [?]
carb gear Count
<fct> <fct> <int>
1 1 3 3
2 1 4 4
3 2 3 4
4 2 4 4
5 2 5 2
6 3 3 3
7 4 3 5
8 4 4 4
9 4 5 1
10 6 5 1
11 8 5 1
相反,我想看到的是排列好的行,这样carb
变量的组就会按照它们的总和的顺序列出,从而累加所有的gear
变量。这就是我使用reorder(carb, Count, sum)
语句时条形图输出的样子。
我希望我的summary_table
看起来像这样:
> summary_table
# A tibble: 11 x 3
# Groups: carb [?]
carb gear Count
<fct> <fct> <int>
1 4 3 5
2 4 4 4
3 4 5 1
4 2 3 4
5 2 4 4
6 2 5 2
7 1 3 3
8 1 4 4
9 3 3 3
10 8 5 1
11 6 5 1
发布于 2018-04-21 06:28:40
你已经很接近了,你只需要在你的表中排序数据就行了!FWIW,如果您发现自己正在执行group(x,y) %>% summarize(count = n())
,您只需使用count(df, x, y)
为自己节省一些代码。
car_summary <- count(mtcars, carb, gear)
summary_table <- car_summary %>%
group_by(carb) %>%
mutate(nn = sum(n)) %>%
arrange(desc(nn), desc(carb)) %>%
select(-nn)
ggplot(data = car_summary, aes(x = reorder(carb, n, sum), y = n, fill = gear)) +
geom_col() + coord_flip() + labs(x = "carb", y = "Count")
summary_table看起来像:
# A tibble: 11 x 3
# Groups: carb [6]
carb gear n
<dbl> <dbl> <int>
1 4.00 3.00 5
2 4.00 4.00 4
3 4.00 5.00 1
4 2.00 3.00 4
5 2.00 4.00 4
6 2.00 5.00 2
7 1.00 3.00 3
8 1.00 4.00 4
9 3.00 3.00 3
10 8.00 5.00 1
11 6.00 5.00 1
https://stackoverflow.com/questions/49956622
复制