如何使用purrr包基于现有数据框模拟生成新数据?
用purrr批量生成分组正态分布数据
首先构造你的示例数据:
library(tidyverse) # 示例数据框 df <- tibble( x = c(1, 2, 3), y = c(5, 7.5, 12.7) )
核心实现代码
下面的代码会为每个x对应的y值作为均值,生成100个正态分布数值,这里默认标准差设为1(方差为1,你可以根据需求修改sd参数):
# 生成目标数据框 result_df <- df %>% # 为每个y生成100个正态分布值,存入列表列 mutate(generated_y = map(y, ~rnorm(n = 100, mean = .x, sd = 1))) %>% # 将列表列展开为多行 unnest(generated_y) %>% # 重命名列以匹配需求 rename(y = generated_y)
自定义方差的扩展
如果需要为不同的x设置不同的方差,只需在原数据框中新增标准差列,用map2同时传递均值和标准差参数:
# 新增标准差列(方差=标准差²) df_with_sd <- df %>% mutate(sd = c(0.5, 1, 1.5)) # 为每个x指定不同的标准差 # 生成带自定义方差的结果 result_df_custom <- df_with_sd %>% mutate(generated_y = map2(y, sd, ~rnorm(n = 100, mean = .x, sd = .y))) %>% unnest(generated_y) %>% select(x, y = generated_y) # 保留需要的列
结果验证
最终的result_df行数应为300(3个x × 100个数值),每个x对应的100个y值的均值会接近原数据框中的y值。
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

