从d3无放回抽取3个观测值并与d2合并的R代码问题求助
解决无放回抽样并合并数据框的问题
我来帮你搞定这个问题!你的核心问题是每次循环都把合并结果覆盖到同一个变量里,最后只能得到最后一次循环的结果,而不是3个独立的数据框。咱们来一步步修正:
首先先把你的数据集定义好(方便复现):
d1 <- c(2, 3, 8) d2 <- data.frame(d1) d1 <- c(1, 7, 9, 10) d3 <- data.frame(d1)
原代码的问题
你写的for循环里,每次生成的merge都会覆盖上一次的结果,循环结束后只会剩下第三次抽样合并的数据框,没法保存三次的结果。
修正后的代码
我们可以用一个列表来存储每次循环的结果,这样就能保留3个独立的数据框了:
# 创建一个空列表来存储3次的结果 result_list <- list() for (r in 1:3) { # 直接从d3中无放回抽取3行,不用手动写索引1:4 sam <- d3[sample(nrow(d3), 3, replace = FALSE), , drop = FALSE] # 将抽样结果和d2合并,并存入列表的对应位置 result_list[[r]] <- rbind(d2, sam) }
代码解释
nrow(d3):获取d3的行数(这里是4),这样代码更灵活,就算d3行数变了也不用改数字drop = FALSE:确保抽样后得到的还是数据框,而不是向量(避免rbind时出错)result_list[[r]]:把每次合并好的数据框存入列表的第r个位置,这样循环结束后,result_list[[1]]、result_list[[2]]、result_list[[3]]就是你要的3个各含6个观测值的数据框
你可以用result_list来查看所有结果,或者单独提取某一个,比如print(result_list[[1]])就能看到第一次的合并结果。
内容的提问来源于stack exchange,提问作者user4773130
相关产品推荐
相关产品推荐

