我想划分一个不平衡的数据集.我当前的数据集有7个类,有些有10000个样本,有些有500个样本.我基本上希望将数据帧大小限制为每类500个观察值(例如,500个观察值*7个类),因此所有类都有大约500个观察值,而不是一些有10.000个,其他有2.000个,等等.

目前,我正在使用caret软件包进行分区,如下所示:

index <- createDataPartition(snv_data$clade, p = .70, list = FALSE)
train <- snv_data[index,]
test <- snv_data[-index,]

我怎样才能使新的数据框架在每个类中的观测值分布均匀呢?

提前谢谢!

编辑:

我想出了一个不太"理想"的解决方案,但它如期发挥了作用:

# i = 1
# 
# 
# for (row in 1:nrow(snv_data)) {
#   
#   if (snv_data$clade[row] == "20I (Alpha, V1)" ) {
#     
#     snv_data = snv_data[-c(row),]
#     i = i+1
#     if (i == 4600) {
#       stop("end")
#     }
# 
#   }
#   
# }

推荐答案

考虑使用by(包装器到tapply)的base个解决方案来跨因子分裂子集运行操作:

# SAMPLE ROWS OF DATA FRAME (DEFAULTS TO 500 OBS)
run_sample <- function(sub, n=500) {
    obs <- sample(nrow(sub), n)
    return(sub[obs,])
}

# LIST OF DATA FRAMES (EACH 500 OBS)
class_dfs <- by(snv_data, snv_data$clade, run_sample)

# COMPILED DATA FRAME (500 x NUM OF CLASSES)
balanced_data <- do.call(rbind, unname(class_dfs))

R相关问答推荐

棒棒糖图表大小和线宽参数故障标签未出现

基于R中的GPS点用方向箭头替换点

删除facet_wrap标签之间的水平线

使用ggplot 2根据R中的类别排列Likert比例gplot

在"gt"表中添加第二个"groupname_col",而不连接列值

将非重复序列高效转换为长格式

使用整齐的计算(curl -curl )和杂音

我如何才能找到FAMILY=POISSON(LINK=&Q;LOG&Q;)中的模型预测指定值的日期?

将文件保存到新文件夹时,切换r设置以不必创建目录

2个Rscript.exe可执行文件有什么区别?

根据列A中的差异变异列,其中行由列B中的相对值标识

从服务器在Shiny中一起渲染图标和文本

如何根据R中其他变量的类别汇总值?

将全局环境变量的名称分配给列表中的所有元素

观察器中的inaliateLater的位置

将工作目录子文件夹中的文件批量重命名为顺序

以不同于绘图中元素的方式对GG图图例进行排序

多元正态分布的计算

如何根据未知数的多列排除重复行

R中从因数到数字的转换