在R语言中生成唯一食物组合及对应频次的解决方案咨询
解决Food组合顺序导致的统计重复问题
这个问题的核心是你没有对每个顾客的Food组合进行标准化排序——同一组食物的不同出现顺序(比如Pizza, Tacos和Tacos, Pizza)被当成了不同的类别,导致统计结果出现错误的重复项。我们只需要在生成组合字符串前对Food进行排序,就能让相同的组合统一格式,从而得到正确的频次统计。
修正后的代码
library(dplyr) customerDataFrame <- data.frame( CustomerID = c('A', 'B', 'B', 'C', 'D', 'D'), Food = c('Pizza', 'Pizza', 'Tacos', 'Tacos', 'Tacos', 'Pizza') ) customerDataFrame %>% group_by(CustomerID) %>% # 关键修改:先对去重后的Food排序,再转成统一格式的字符串 summarise(Food = toString(sort(unique(Food)))) %>% ungroup() %>% group_by(Food) %>% summarise(n = n())
正确输出
# A tibble: 3 x 2 Food n <chr> <int> 1 Pizza 1 2 Pizza, Tacos 2 3 Tacos 1
代码解释
- 在
group_by(CustomerID)后的summarise步骤中,我们新增了sort()操作:对每个顾客去重后的Food向量进行排序,这样不管顾客购买食物的顺序如何,相同的组合都会被转换成统一的字符串格式(比如Tacos, Pizza会被整理成Pizza, Tacos)。 - 后续按Food分组统计时,原本被误判为不同类别的相同组合就会被归为一组,从而得到符合预期的频次结果。
内容的提问来源于stack exchange,提问作者AENick
相关产品推荐
相关产品推荐

