在R语言中如何基于多个集合生成对应的multiset(多重集合)
R语言构建多重集合的实现方案
以下两种方案均可实现需求,支持你给出的示例场景直接运行:
方案1:纯基础R实现(无需安装额外依赖)
合并所有集合后直接用table()统计频次,即可得到元素对应的总出现次数:
# 录入示例集合 set1 <- c(1,3,6) set2 <- c(1,2,6,7,9) set3 <- c(1,3,7) # 合并所有元素后统计频次 count_res <- table(c(set1, set2, set3)) # 转换为命名向量格式的多重集合 multiset <- setNames(as.numeric(count_res), names(count_res)) # 输出结果 print(multiset)
运行后输出如下,和你要求的计数规则完全匹配:
1 2 3 6 7 9 3 1 2 2 2 1
如果需要严格输出{1:3,2:1,3:2,6:2,7:2,9:1}格式的字符串,可追加一行格式化代码:
paste0("{", paste(names(multiset), multiset, sep = ":", collapse = ","), "}")
方案2:tidyverse生态实现(适合已使用dplyr的场景)
如果日常使用tidyverse系列工具,分组统计的逻辑可读性更强:
library(dplyr) data.frame(value = c(set1, set2, set3)) %>% group_by(value) %>% tally(name = "count")
运行后会得到两列的统计结果,第一列是元素值,第二列是该元素在所有集合中的总出现次数。
补充说明
- 以上方法对数值、字符串类型的元素都适用,不需要修改逻辑
- 如果单个集合内部存在重复元素,统计时也会自动计入总次数,符合多重集合的通用定义
内容的提问来源于stack exchange,提问作者Amin Kaveh
相关产品推荐
相关产品推荐

