R语言如何通过自定义函数按分组采样生成新dataframe
R分组抽样函数实现方案
原有代码问题说明
- 示例数据的分组列名称为
b,代码中误用了不存在的group列,会直接报错 filter(group == "aorb")中的aorb加了引号,会被识别为固定字符串,无法读取函数传入的参数值- 抽样数量硬编码为10,无法灵活调整每次的抽样量
- 无需手动指定
df_out为dataframe类型:dplyr管道操作返回的结果本身就是dataframe格式,R函数默认会将最后一行运行的对象作为返回值输出
修正后的可运行实现
方法1:自定义函数分别抽取
首先加载依赖包:library(dplyr)
示例数据构造:
df <- data.frame(var1 = c(rnorm(50,50,10)), b = letters[1:2])
通用函数定义:
random_sample_groups <- function(data, group_col, target_group, n) { data %>% filter({{group_col}} == target_group) %>% sample_n(size = n) }
调用示例(从两个分组各抽10个观测):
# 抽取分组a的10个观测,生成dataframe df_a df_a <- random_sample_groups(data = df, group_col = b, target_group = "a", n = 10) # 抽取分组b的10个观测,生成dataframe df_b df_b <- random_sample_groups(data = df, group_col = b, target_group = "b", n = 10)
方法2:一次性批量生成两个dataframe
如果不需要单独调整两个分组的抽样量,可以用更简洁的批量处理方式:
library(dplyr) library(purrr) sample_res <- df %>% group_by(b) %>% slice_sample(n = 10) %>% group_split() # 提取两个结果dataframe df_a <- sample_res[[1]] df_b <- sample_res[[2]]
运行class(df_a)可确认返回结果为标准dataframe类型。
内容的提问来源于stack exchange,提问作者Pablote
相关产品推荐
相关产品推荐

