在R中移除两组样本量不足2的数据框列的方法
筛选符合样本量要求的列
要解决这个问题,核心是先检查每列在0组和1组中的有效样本量(非NA值的数量),只保留两组样本量都≥2的列。以下是具体实现方法:
方法一:Base R 实现
# 计算每列在两组中的有效样本量 sample_counts <- t(sapply(df[-1], function(col) { tapply(col, df$group, function(x) sum(!is.na(x))) })) # 筛选出两组样本量都≥2的列名 valid_columns <- rownames(sample_counts)[apply(sample_counts, 1, function(x) all(x >= 2))] # 生成过滤后的数据集 df_filtered <- df[, c("group", valid_columns)]
方法二:dplyr 实现(更简洁)
如果你习惯用tidyverse工具链,可以用以下代码:
library(dplyr) df_filtered <- df %>% select( group, # 对每列检查两组样本量是否都≥2 where(function(col) { group_sizes <- tapply(col, df$group, function(x) sum(!is.na(x))) all(group_sizes >= 2) }) )
验证结果
运行上述代码后,df_filtered会自动移除pear和cherry列:
pear列在0组的有效样本量为0,不满足≥2的要求;cherry列在1组的有效样本量仅为1,同样不满足要求。
剩下的apple、banana、kiwi列都符合两组样本量≥2的条件,可以安全执行wilcox.test。
内容的提问来源于stack exchange,提问作者Sylvia Rodriguez
相关产品推荐
相关产品推荐

