【发布时间】:2021-04-01 16:03:40
【问题描述】:
我正在尝试使用来自另一个数据帧的随机抽样重复向数据帧添加列。
我的第一个包含要从中采样的实际数据的数据框看起来像这样
df <- data.frame(cat = c("a", "b", "c","a", "b", "c"),
x = c(6,23,675,1,78,543))
我有另一个这样的数据框:
df2 <- data.frame(obs =c(1,2,3,4,5,6,7,8,9,10),
cat=c("a", "a", "a", "b", "b", "b", "c","c","c", "c"))
我想向 df2 添加 1000 个新列,这些列从 df 中随机抽样,按 cat 分组。我想出了一种(可能是非常业余的)方法,通过使用 slice_sample() 使用 df 的随机样本创建一个新的数据帧 sample1,然后将 sample1 与 df2 合并。
df <- df %>%
group_by(cat)
df2 <- df2 %>%
group_by(cat)
sample1 <- slice_sample(df, preserve = T, n=3, replace = T )
sample1 <- sample1 %>%
ungroup() %>%
mutate(obs=c(1:9)) %>%
select(-cat)
df3 <- merge(df2,sample1, by= "obs")
现在,我想找到一种方法重复此操作 1000 次,最终得到具有 1000 列(x1、x2、x3 等)的 df3
我研究过重复循环,但无法弄清楚如何使上述代码在循环内工作。
【问题讨论】:
-
我认为您可以将其包装在一个函数中并使用
replicate(1000, call_your_fn)