如何获取5组维恩图各分区对应的唯一元素列表?
R语言5组维恩图各分区元素提取方案
你可以通过基础R逻辑实现需求,无需依赖限制分组数量的第三方工具,支持任意N组的维恩分区元素提取:
首先整理你的输入分组为命名列表,后续仅需修改该列表即可适配你的实际数据:
# 分组命名列表,d1-d5对应你的5个分组 set_list <- list( d1 = c("01100", "01110", "01120", "01200", "01210", "01212", "01230", "01250", "01240"), d2 = c("01100", "01110", "01120", "01200", "01210", "01240"), d3 = c("01100", "01110", "01200", "01210", "01230", "01250", "01240", "01501"), d4 = c("01100", "01200", "01210", "01212", "01230", "01250", "01240", "01501", "01503"), d5 = c("01100", "01110", "01120", "01200", "01210", "01212", "01240", "05417") )
运行核心计算逻辑:
# 提取所有分组的唯一元素 all_unique_items <- unique(unlist(set_list)) # 遍历每个元素,标记其所属的维恩分区 item_partition_map <- lapply(all_unique_items, function(item) { # 匹配元素所属的所有分组名称 in_sets <- names(which(sapply(set_list, function(set) item %in% set))) # 生成分区名称,格式为unique_to_分组1_分组2... partition_tag <- paste0("unique_to_", paste(in_sets, collapse = "_")) return(data.frame(item = item, partition = partition_tag)) }) partition_df <- do.call(rbind, item_partition_map) # 按分区分组,得到每个分区对应的元素列表 final_result <- split(partition_df$item, partition_df$partition)
你可以直接按分区名称调取对应元素,空分区会返回长度为0的向量,你可以自行转换为None展示:
# 调取仅属于d5的元素 > final_result$unique_to_d5 [1] "05417" # 调取仅属于d1的元素,不存在时返回None > if (length(final_result$unique_to_d1) == 0) "None" else final_result$unique_to_d1 [1] "None" # 调取仅属于d4的元素 > final_result$unique_to_d4 [1] "01503"
如果需要输出为数据框格式,可直接使用上面生成的partition_df,每行对应一个元素和其所属的分区。
内容的提问来源于stack exchange,提问作者CuriousDude
相关产品推荐
相关产品推荐

