You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按组不同比例对列表随机抽样的R语言实现问题求助

问题分析

你已经成功算出了每个物种的抽样索引,但提取样本时出了问题——st3返回完整数据集的核心原因是**lapply没有把对应物种的抽样索引正确传递给处理函数**。

看你这段代码:

st3 <- lapply(st, function(df,st2) df2 <- df[st2,])

这里lapply只会把st里的每个数据框传给df参数,st2参数并没有被自动匹配传递;而且函数里直接用st2的话,它指向的是整个索引列表,不是当前物种对应的那组索引,相当于没做筛选,直接返回了原数据框。

解决方案

我们可以用Map()函数来配对处理每个物种的数据框和对应的抽样索引,它能把两个列表的对应元素一起传给处理函数,完美解决匹配问题:

# 修正后的st3生成代码
st3 <- Map(function(df, idx) df[idx, ], st, st2)

如果更习惯用lapply,也可以通过物种名称来匹配对应索引:

st3 <- lapply(names(st), function(nm) st[[nm]][st2[[nm]], ])
names(st3) <- names(st) # 给结果列表恢复物种名称
验证与扩展

运行修正后的代码后,用str(st3)查看结果:setosa的观测数应该是37条(500.75),versicolor是40条(500.8),virginica是35条(50*0.7),和你之前得到的索引长度完全一致。

要是需要把抽样后的列表合并成一个完整的数据框,方便后续分析,还可以加一步:

iris_sample <- do.call(rbind, st3)

内容的提问来源于stack exchange,提问作者Ginger_girl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:41:12