需要生成一个有序的表来匹配我订购的条形图

时间:2018-04-21 14:08:25

标签: r dplyr

我总结了一个按两个变量分组的数据集。我最近学会了如何根据主要分组变量的总计数重新排序条形图。我现在想生成一个重新排序的数据表,以匹配重新排序的条形图。这就是我对条形图的看法:

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")

Ordered Bar Chart

如果我然后尝试生成一个表来汇总数据,就像生成绘图一样:

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 

1 个答案:

答案 0 :(得分:0)

您非常接近,您只需要在表格中订购数据! 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