-1

假设我有这个:

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 个条形图

非常感谢你

4

2 回答 2

1

在 中完成聚合的另一种解决方案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()

在此处输入图像描述

于 2020-04-05T09:00:25.297 回答
0

你可以试试这个:

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))
于 2020-04-05T07:51:35.030 回答