r - group_by 跨多列的唯一计数

标签 r group-by count multiple-columns

我有一张表,其中包含有关商店和水果(苹果和橙子)的信息。每个商店都有一个库存,这些水果按其 ID 记录。

  • 苹果和橙子可以有不同的类型,例如粉红女郎、皇家晚宴、苹果前夕、苹果爵士乐等。当它们是不同类型时,它们会使用不同的 ID 进行存储。
  • 但是当两个苹果属于同一类型时,它们将具有相同的 ID。

我有兴趣计算每个商店有多少种不同类型的苹果和多少种不同类型的橙子。

我的输入是:

Shop     Apple_id   Orange_id
Coles    12         201
Woolies  20         51
Walmart  13         16
Woolies  20         52
Coles    14         202
Target   19         81
M&S      75         99
Coles    16         203
M&S      71         99
Dunnes   56         101
M&S      72         91

我的预期输出是:

Shop    Apples  Oranges
Coles   3       3
Dunnes  1       1
M&S     3       2
Target  1       1
Walmart 1       1
Woolies 1       2

我可以使用 dplyr() 包为每种水果逐一运行代码:

# Extract information on Apples only
library(dplyr)

apples_by_shop = raw %>%
  group_by(shop) %>%
  distinct(Apple_id) %>%
  count()

同样,我可以编写代码来仅提取橙子的信息:

# Extract information on Oranges only
oranges_by_shop = raw %>%
  group_by(shop) %>%
  distinct(Orange_id) %>%
  count()

我的问题是,我可以将上述两者合并到一行代码中,例如通过汇总函数吗?

最佳答案

你可以试试

library(dplyr)

raw %>%
  group_by(Shop) %>%
  summarise(Apples = length(unique(Apple_id)),
            Oranges = length(unique(Orange_id)))

  Shop    Apples Oranges
  <chr>    <int>   <int>
1 Coles        3       3
2 Dunnes       1       1
3 M&S          3       2
4 Target       1       1
5 Walmart      1       1
6 Woolies      1       2

df %>%
  group_by(Shop) %>%
  summarise(Apples = n_distinct(Apple_id),
            Oranges = n_distinct(Orange_id))

关于r - group_by 跨多列的唯一计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70089453/

相关文章:

R dplyr动态列选择

r - 具有 Lubridate 持续时间的 Data.frame 摘要

sql - postgresql中的分组问题

Mysql如何根据优先级进行选择

sql-server - SQL Server性能: GROUP BY int vs GROUP BY VARCHAR

python - Pyspark 多 groupby 具有不同的列

count - 在 pyDAL 中创建 HAVING COUNT(column) > 2 子句

r - 在 R Shiny 中上传和查看 pdf

r - 如何在大型稀疏矩阵中组合具有相同名称的列

r - 为 geom_hline 添加图例条目