从R语言数据框变量a中随机抽取固定数量元素的方法
解决R语言中多数据框固定数量随机抽样问题
Hey there! 作为刚接触R的生物学家,这种针对多个数据框的批量抽样需求其实特别常见,完全不用觉得问题简单就不好意思问😉 我来一步步给你讲清楚怎么实现:
第一步:单个数据框的抽样方法
假设你有一个数据框my_df,其中包含变量a,想要从中随机抽取1000个值并生成新数据框,分两种情况处理:
情况1:原数据框中a的长度≥1000(无放回抽样)
如果你的数据量足够,直接用无放回抽样就可以,代码如下:
# 抽取1000个无重复的a值,生成新数据框 sampled_df <- data.frame(a = sample(my_df$a, size = 1000, replace = FALSE))
情况2:原数据框中a的长度<1000(有放回抽样)
如果某些数据框里a的数量不足1000,需要用有放回抽样来凑够数量,只需要把replace参数改成TRUE:
# 有放回抽取1000个a值,生成新数据框 sampled_df <- data.frame(a = sample(my_df$a, size = 1000, replace = TRUE))
第二步:多个数据框的批量处理
如果你有很多个数据框,一个个手动处理太麻烦,推荐把所有数据框放进一个列表里,然后用lapply()批量完成抽样:
示例步骤:
- 先把你的数据框放进列表(比如你的数据框叫df1、df2、df3):
# 创建包含所有数据框的列表 df_list <- list(df1 = df1, df2 = df2, df3 = df3)
- 批量抽样生成新的列表,里面每个元素是对应原数据框抽样后的新数据框:
# 批量处理,这里默认用有放回抽样(避免数据量不足报错) sampled_df_list <- lapply(df_list, function(df) { data.frame(a = sample(df$a, size = 1000, replace = TRUE)) })
- 如果想把抽样后的每个数据框单独提取出来,比如取第一个:
sampled_df1 <- sampled_df_list$df1
额外提示
- 如果你确定所有数据框的
a长度都≥1000,就把replace改成FALSE即可 - 可以根据需要给新数据框添加其他列(如果原数据框有其他变量需要保留的话,只要在
data.frame()里加上就行)
内容的提问来源于stack exchange,提问作者Franziska Hildebrandt
相关产品推荐
相关产品推荐

