使用R的table函数按ID分组实现multiple_products交叉频率统计
问题原因
你当前的代码存在两个核心问题:
- dplyr的
group_by()仅为后续dplyr族函数声明分组逻辑,不会自动对原始行数据去重,直接传递给table()的还是完整的行级数据 - 管道操作中直接调用
d$multiple_products是取原始数据的整列,完全不受上游group_by()逻辑的影响,所以统计结果是行级频率而非ID级频率,不同数据类型拼接还会触发类型错误
解决方案
方法1:仅使用R基础包实现
先提取ID和multiple_products的唯一组合,再调用table()统计:
# 每个ID仅保留一行对应记录,再统计频率 table(unique(d[, c("ID", "multiple_products")])$multiple_products)
运行输出即为你需要的结果:
0 1 1 1
方法2:dplyr管道配合基础table()实现
如果习惯用管道操作,先做ID级去重再统计即可:
library(dplyr) dtable <- d %>% # 保留ID和multiple_products的唯一组合,同ID仅保留1行 distinct(ID, multiple_products) %>% # 提取multiple_products字段 pull(multiple_products) %>% # 调用基础包table统计 table()
内容的提问来源于stack exchange,提问作者logjammin
相关产品推荐
相关产品推荐

