如何在R中筛选出对应不同Outcome的Variant值
在R中找出对应多个不同Outcome的Variant
先构造示例数据
你可以直接运行以下代码生成你提供的数据集:
df <- data.frame( Variant = c(1,1,1,1,2,2,2,3,3,4,4,4,4,4,5,5,5,5), Outcome = c("A","A","A","B","C","C","C","D","E","F","F","F","G","G","H","H","H","H") )
解决方案
核心思路是按Variant分组,统计每个组内唯一Outcome的数量,筛选出数量大于1的Variant,以下两种方法都能实现需求:
方法1:基础R实现
不需要额外安装包,用原生函数就能搞定:
# 按Variant分组,计算每组唯一Outcome的数量 outcome_stats <- aggregate(Outcome ~ Variant, data = df, FUN = \(x) length(unique(x))) # 筛选出有多个不同Outcome的Variant target_variants <- outcome_stats$Variant[outcome_stats$Outcome > 1] # 按你想要的格式输出 cat("Variant\n") if (length(target_variants) > 1) { cat(paste(target_variants[-length(target_variants)], collapse = ",\n"), "\n&", target_variants[length(target_variants)]) } else { cat(target_variants) }
方法2:dplyr包实现
如果你常用tidyverse工具,代码更简洁直观:
library(dplyr) target_variants <- df %>% group_by(Variant) %>% summarise(unique_outcome_count = n_distinct(Outcome)) %>% filter(unique_outcome_count > 1) %>% pull(Variant) # 格式化输出 cat("Variant\n") if (length(target_variants) > 1) { cat(paste(target_variants[-length(target_variants)], collapse = ",\n"), "\n&", target_variants[length(target_variants)]) } else { cat(target_variants) }
两种方法最终都会输出:
Variant 1, 3 & 4
内容的提问来源于stack exchange,提问作者M. waal
相关产品推荐
相关产品推荐

