如何基于site与quadrant从其他数据集抽样填充param列?
# 解决方案 ### 方法1:使用dplyr(简洁易读,推荐) 通过分组操作直接在对应组内抽样: ```r library(dplyr) df_with_param <- df %>% group_by(site, quad) %>% # 从df_sample的对应site+quad组中随机抽取n个值(n为当前组行数),允许重复抽样 mutate(param = sample(df_sample$param[df_sample$site == first(site) & df_sample$quad == first(quad)], size = n(), replace = TRUE)) %>% ungroup() # 查看结果 head(df_with_param)
方法2:使用base R(无需额外包)
利用by()函数实现分组抽样:
# 按site和quad分组处理df,为每组抽取对应样本 df$param <- unlist(by(df, list(df$site, df$quad), function(x) { # 提取df_sample中对应组的param数据 group_data <- df_sample$param[df_sample$site == x$site[1] & df_sample$quad == x$quad[1]] # 随机抽取与当前组行数匹配的样本,允许重复抽样 sample(group_data, size = nrow(x), replace = TRUE) })) # 查看结果 head(df)
注意事项
如果df中某site+quadrant组的行数超过df_sample对应组的样本数量,必须设置replace=TRUE以允许重复抽样,否则会抛出样本数量不足的错误。
内容的提问来源于stack exchange,提问作者Rspacer
相关产品推荐
相关产品推荐

