我有一张表,其中包含有关商店和水果(苹果和橙子)的信息。每个商店都有一个库存,这些水果按其 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/