如何在R中通过交叉相乘平衡分类变量的样本比例?
在R中实现类别样本的重复平衡操作
你需要通过重复样本让两类数据量一致:Category 0有3个样本,需重复7次;Category 1有7个样本,需重复3次,最终两类各21条数据。下面给你两种实用的实现方式:
基础R原生方法
无需额外安装包,用原生函数即可完成:
# 先统计两类的样本数量 n0 <- sum(df$Category == 0) n1 <- sum(df$Category == 1) # 给每一行分配对应的重复次数:0类重复n1次,1类重复n0次 repeat_times <- ifelse(df$Category == 0, n1, n0) # 按重复次数复制行,生成平衡后的数据集 balanced_df <- df[rep(seq_len(nrow(df)), repeat_times), ]
dplyr tidyverse风格方法
如果习惯用tidyverse工具链,管道写法更直观:
library(dplyr) # 硬编码重复次数(适配你当前的数据集) balanced_df <- df %>% group_by(Category) %>% slice(rep(row_number(), times = case_when(Category == 0 ~ 7, Category == 1 ~ 3))) %>% ungroup() # 通用写法(自动获取两类样本量,适配任意不平衡数据集) n0 <- sum(df$Category == 0) n1 <- sum(df$Category == 1) balanced_df <- df %>% group_by(Category) %>% slice(rep(row_number(), times = ifelse(Category == 0, n1, n0))) %>% ungroup()
结果验证
执行以下代码确认两类样本量是否一致:
table(balanced_df$Category)
正常输出应为0:21 1:21,说明平衡操作成功。
内容的提问来源于stack exchange,提问作者Niro Mal
相关产品推荐
相关产品推荐

