首页 > 解决方案 > R 中是否有生成唯一组合及其频率的解决方案?

问题描述

这是我的代码。我正在尝试生成 Food 列的所有非重复组合以及在给定 ID 列时它出现的次数。


customerDataFrame <- data.frame(CustomerID = c('A', 'B', 'B', 'C', 'D', 'D'),
                                Food = c('Pizza', 'Pizza', 'Tacos', 'Tacos', 'Tacos', 'Pizza'))

customerDataFrame %>% 
  group_by(CustomerID) %>% 
  summarise_all(funs(toString(unique(.)))) %>%
  ungroup() %>%
  group_by(Food) %>%
  summarise(n= n())

这是现在的输出:

# A tibble: 4 x 2
  Food             n
  <chr>        <int>
1 Pizza            1
2 Pizza, Tacos     1
3 Tacos            1
4 Tacos, Pizza     1

这在技术上是不正确的,因为购买 (Pizza, Tacos) 和 (Tacos, Pizza) 的客户应该属于同一组。他们购买的顺序无关紧要。

(我从这个答案中得到了代码:Using dplyr to create vector of unique combination of values for a given group

这是我想要得到的:

# A tibble: 4 x 2
  Food             n
  <chr>        <int>
1 Pizza            1
2 Pizza, Tacos     2
3 Tacos            1

标签: r

解决方案


当您toString sort使用Food.

library(dplyr)

customerDataFrame %>% 
  group_by(CustomerID) %>% 
  summarise(Food = toString(sort(Food))) %>%
  count(Food)

#   Food            n
#  <chr>        <int>
#1 Pizza            1
#2 Pizza, Tacos     2
#3 Tacos            1

推荐阅读