首页 > 解决方案 > 在一个新组下折叠数据框值

问题描述

我已经做了一些寻找这个问题的答案,但是,我不完全确定如何提出这个问题,所以在大多数情况下,搜索一直没有结果。

假设我有一个看起来像这样的 DF

customer, revenue
a, 2000 
b, 2000 
c, 3000 
Microsoft, 4000 
Oracle, 5000 

我想得到一个有三个堆栈的堆积条形图......其他,甲骨文和微软。其他将是折叠所有不是微软或甲骨文的东西并将收入相加的结果。微软和甲骨文将自立门户。

条形图将是一个条形图,总值为 16,000,单个堆栈为 (Other=7000, Microsoft = 4000, Oracle=5000)

希望这是有道理的。

我现在的代码将分别列出所有客户。实际上,这里有更多的客户,因此条形图将无法阅读。

finalData <- finalData %>% 
group_by(product, customer) %>%
summarize(revenue = sum(revenue))

是否有一些我可以执行的变异或附加 group_by 操作将折叠不在standAloneCustomers 中的所有内容并将其命名为“其他”?

感谢您的帮助。

标签: rdplyr

解决方案


我们可以replace将“Microsoft”、“Oracle”以外的值改为“Other”并summarise获得sum“收入”

library(dplyr)
library(ggplot2)
finalData %>% 
      group_by(product, customer = replace(customer, 
         !customer %in% c("Microsoft", "Oracle"), "Other")) %>%
       summarise(revenue = sum(revenue)) %>%
    ggplot(aes(x= product, y=revenue, fill = customer)) +
       geom_col()

在此处输入图像描述

数据

finalData <- structure(list(customer = c("a", "b", "c", "Microsoft", "Oracle"
), revenue = c(2000, 2000, 3000, 4000, 5000), product = c("A", 
"A", "A", "A", "A")), row.names = c(NA, -5L), class = "data.frame")

推荐阅读