R:如何在 R 中聚合和分组多个列 + 图表

R: How to aggregate and group by more than one column + chart in R

假设我有这个:

Customer Server Size
Cus_a    Ser_1  3
Cus_a    Ser_1  4
Cus_a    Ser_2  2
Cus_b    Ser_2  1
Cus b    Ser_2  3
Cus_b    Ser_2  2
Cus_c    Ser_2  4
Cus c    Ser_2  1
Cus_c    Ser_3  4

我需要聚合新的数据表单,以显示每个服务器上每个客户的总大小,例如:

Cus_a Ser_1 7
Cus_a Ser_2 2
Cus_b Ser_2 6
Cus_c Ser_2 5
Cus_c Ser_3 4

之后,我需要将所有内容都放在 geom_col 中,以显示按服务器直观分组的条形图。 :) 再说一遍 - 如果一个客户端位于多个服务器上,则它可以在图表中以 1 个以上的形式存在

非常感谢

你可以试试这个:

library(dplyr)
library(ggplot2)

df %>%
  group_by(Customer, Server) %>%
  summarise(Size = sum(Size)) %>%
  ggplot() + aes(x = Server, y = Size, fill = Customer) + geom_col()

数据

df <- structure(list(Customer = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 
3L, 3L, 3L), .Label = c("Cus_a", "Cus_b", "Cus_c"), class = "factor"), 
Server = structure(c(1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L), .Label = c("Ser_1", 
"Ser_2", "Ser_3"), class = "factor"), Size = c(3L, 4L, 2L, 
1L, 3L, 2L, 4L, 1L, 4L)), class = "data.frame", row.names = c(NA,-9L))

另一个解决方案,聚合在 base R 中完成,是这样的:

df3 <- aggregate(df$Size, list(df$Customer, df$Server), sum)

注意更改的列名:

df3
  Group.1 Group.2 x
1   Cus_a   Ser_1 7
2   Cus_a   Ser_2 2
3   Cus_b   Ser_2 6
4   Cus_c   Ser_2 5
5   Cus_c   Ser_3 4

为方便起见,使用 df 中的列名称重命名列:

使用新的列名绘制堆积条形图:

names(df3) <- names(df)

现在绘制堆叠条形图:

ggplot(df3) + aes(x = Server, y = Size, fill = Customer) + geom_col()