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()
假设我有这个:
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()