【问题标题】:Select only groups with subgroups who all have an observation仅选择具有子组且都具有观察值的组
【发布时间】:2021-08-26 06:51:48
【问题描述】:

我有以下数据(见下文)。我试图计算一家公司每年购买的一种产品(例如:苹果)的数量。我设法找到了这部分的代码。接下来,我只想选择每年都购买苹果的公司,而将其他公司排除在外。所以我想要的输出是首先按公司分组数据,而不是按类型,而不是按年份,每个公司每年每种类型购买的类型数量,但仅限于每年购买东西的公司。通过这种方式,我只保留长期客户并查看他们的购买模式。我认为过滤器可以解决问题,但它也会返回不是长期客户的公司。不幸的是,我在互联网上搜索时没有找到解决方案。

如果有人能提供帮助,非常感谢!

代码


MASTERDATA %>%
  group_by(COMPANY,Type,Time)%>% 
  summarize(Amount_COMPANY = (sum(Amount, na.rm=TRUE)))%>%
  filter(Type=="Apple",Amount_COMPANY>0)

数据示例

Productnr Type Amount COMPANY Time
1 Apple 29 Company1 2003
1 Pear 271 Company2 2004
3 Apple 565 Company2 2001
2 Banana 354 Company2 2006
2 Pear 984 Company3 2003
1 Banana 247 Company3 2000
... ... ... ... ...

【问题讨论】:

  • 您的预期输出如何?

标签: r dplyr


【解决方案1】:

如果您只想显示那些每年都购买过东西(= 任何产品)的公司,那么我们可以group_by(COMPANY) 并过滤那些具有length(unique(Time))(其中Time 来自每个公司)等于@987654325 的公司@(其中.$Time来自整个数据集)。

我更改了您的示例数据,以便更清楚地了解它是如何工作的。我们只查看2001、2002 和2003 的年份,并希望筛选出每年购买过东西的公司(任何Product)。

library(dplyr)

MASTERDATA <- tibble::tribble(
  ~Productnr,    ~Type, ~Amount,   ~COMPANY, ~Time,
  1L,  "Apple",     29L, "Company1", 2003L,
  1L,  "Apple",    271L, "Company2", 2003L,
  2L,  "Apple",    354L, "Company2", 2001L,
  2L,  "Apple",    984L, "Company3", 2003L,
  1L,  "Apple",    247L, "Company3", 2001L,
  1L,  "Pear",     29L, "Company1", 2003L,
  1L,  "Banana",    271L, "Company2", 2003L,
  3L,  "Banana",    565L, "Company2", 2002L,
  2L,  "Pear",    354L, "Company2", 2001L,
  2L,  "Banana",    984L, "Company3", 2003L,
  1L,  "Pear",    247L, "Company3", 2001L
)

MASTERDATA %>%
  group_by(COMPANY) %>% 
  filter(length(unique(Time)) == length(unique(.$Time)),
         Type == "Apple") %>% 
  group_by(COMPANY, Type, Time) %>% 
  summarize(Amount_COMPANY = (sum(Amount, na.rm=TRUE))) 

#> `summarise()` has grouped output by 'COMPANY', 'Type'. You can override using the `.groups` argument.
#> # A tibble: 2 x 4
#> # Groups:   COMPANY, Type [1]
#>   COMPANY  Type   Time Amount_COMPANY
#>   <chr>    <chr> <int>          <int>
#> 1 Company2 Apple  2001            354
#> 2 Company2 Apple  2003            271

由reprex package (v2.0.1) 于 2021 年 8 月 26 日创建

【讨论】:

  • 谢谢!你之前使用arrange的原因是什么?
  • 哦,这一步基本上是为了让我在处理数据以获得更好的概览时。我们不需要它,所以我从我的答案中删除它。
  • 如果您想筛选出每年只购买苹果的公司怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多