在R中实现无放回多随机采样:向量分4组的问题求助
解决方案:按指定大小拆分随机样本
没问题,我来帮你搞定这个向量拆分的问题!你之前的代码之所以出问题,是因为length(M)/4得到的是657.5,用它来生成分组索引时,R会自动把它转成整数657,这样就会生成657个分组(而不是你想要的4个),完全不符合需求。接下来给你两种简单可行的方法,都能精准实现你要的3个657、1个659的随机样本拆分:
方法一:手动指定分组大小(最直观)
先把原始向量随机打乱,然后用rep()生成对应长度的分组标识,最后用split()拆分:
# 生成原始向量 M <- 1:2630 # 随机打乱向量(保证样本的随机性) shuffled_M <- sample(M) # 定义每个分组的大小:前3组657,最后1组659 group_sizes <- c(657, 657, 657, 659) # 生成分组ID:重复1三次657次,重复2三次657次,以此类推 group_ids <- rep(1:4, times = group_sizes) # 拆分向量 mysample <- split(shuffled_M, group_ids)
你可以用下面的代码验证每个分组的长度是否符合要求:
sapply(mysample, length) # 输出结果应该是:657 657 657 659
方法二:计算拆分位置(更灵活)
如果之后需要调整分组大小,这种方法只需要修改拆分位置即可:
M <- 1:2630 shuffled_M <- sample(M) # 计算拆分的位置点 split_points <- c(657, 657*2, 657*3) # 拆分向量 mysample <- split(shuffled_M, findInterval(seq_along(shuffled_M), split_points))
同样用sapply(mysample, length)验证,结果和方法一一致。
这两种方法都能完美实现你的需求,而且保证了样本的随机性,你可以根据自己的习惯选择~
内容的提问来源于stack exchange,提问作者MNU
相关产品推荐
相关产品推荐

