子样本a df在管道R中多次

子样本a df在管道R中多次,r,dplyr,subset,tidyverse,R,Dplyr,Subset,Tidyverse,我有一个50行的df。我想模拟它,就像我只有5行那样,但我想做很多次。我知道我可以分开做,然后把它们绑在一起,但那太愚蠢了。希望有一个命令的方法。我在想一些map()或do{}的东西,但目前我对它们不太熟悉 如果可能的话,我希望保持tidyverse语法,因为%%>%%管道将继续 # make df df <- data.frame(sample=c(1:50), y = sample(1:100, 50, replace=T) ) # sample

我有一个50行的df。我想模拟它,就像我只有5行那样,但我想做很多次。我知道我可以分开做,然后把它们绑在一起,但那太愚蠢了。希望有一个命令的方法。我在想一些
map()
do{}
的东西,但目前我对它们不太熟悉

如果可能的话,我希望保持tidyverse语法,因为
%%>%%
管道将继续

# make df
df <- data.frame(sample=c(1:50),
                 y = sample(1:100, 50, replace=T) )


# sample df
df %>% 
  sample_n(5) %>%
  mutate(simulation = 1) 

# so this does what I want once, but I want to repeat this, say, 20 times. 


# desired output:

  sample   y simulation
1     34   4          1
2      7   1          1
3     26  59          1
4     41  56          1
5     44  82          1
6     25   9          2
7     40  11          2
8     13  39          2
9     6   56          2
10    24  80          3
11    36  41          3
12     9   2          3
13    11  56          3
14     1  36          3
15    25   8          3
# and so on to 20 simulations. 


#制作df
df%
样本n(5)%>%
变异(模拟=1)
#这是我想要的,但我想重复,比如说,20次。
#期望输出:
样本y模拟
1     34   4          1
2      7   1          1
3     26  59          1
4     41  56          1
5     44  82          1
6     25   9          2
7     40  11          2
8     13  39          2
9     6   56          2
10    24  80          3
11    36  41          3
12     9   2          3
13    11  56          3
14     1  36          3
15    25   8          3
#以此类推,进行20次模拟。
谢谢

replicate(…,simplify=FALSE)
将快速执行您需要的操作,然后您可以稍后绑定它

库(dplyr)
绑定行(复制(3,样本n(df,5),simplify=FALSE),
.id=“模拟”)
#模拟样本y
# 1           1     12  3
# 2           1     42 22
# 3           1     14 50
# 4           1      3  6
# 5           1     45 46
# 6           2      2  9
# 7           2     30 18
# 8           2     24 66
# 9           2     50 62
# 10          2     21 96
# 11          3      3  6
# 12          3     33 47
# 13          3     25 12
# 14          3     32 96
# 15          3     20  4
或完全在tidyverse内:

purrr::map\u dfr(1:3,~sample\n(df,5),.id=“模拟”)
类似这样的东西

库(tidymodels)
#>--附加软件包--------------------------------------------tidymodels 0.1.0--
#>v扫帚0.5.6 v配方0.1.12
#>v刻度盘0.0.6 v R采样0.0.7
#>v dplyr 1.0.0 v TIBLE 3.0.1
#>v ggplot2 3.3.1 v调谐0.1.0
#>v推断0.5.1 v工作流0.1.1
#>v防风草0.1.1 v标尺0.0.6
#>v purrr 0.3.4
#>--冲突---------------------------------------------tidymodels_Conflicts()--
#>x purrr::discard()遮罩比例::discard()
#>x dplyr::filter()屏蔽stats::filter()
#>x dplyr::lag()屏蔽stats::lag()
#>x ggplot2::margin()屏蔽拨号::margin()
#>x配方::步骤()遮罩统计::步骤()
df%
指定(公式=y~样本)%>%
假设(null=“独立”)%>%
生成(reps=100,type=“permute”)%%>%
切片头(n=5)
#>#A tible:500 x 3
#>#组:复制[100]
#>y样本复制
#>           
#>  1    63      1         1
#>  2    53      2         1
#>  3    57      3         1
#>  4    44      4         1
#>  5    82      5         1
#>  6    92      1         2
#>  7    83      2         2
#>  8    89      3         2
#>  9    17      4         2
#> 10    35      5         2
#> # ... 还有490行

由(v0.3.0)创建于2020-06-16有使用管道进行模拟分析的软件包你尝试过推断软件包吗?我想补充一点是很酷的,置换不应该用于测试独立性以外的任何东西谢谢-我喜欢这个版本,但我对整个整洁的版本有一些问题,因为我也需要它的管道。比如,`df%>%map\u-dfr(1:2,~sample\n(,5),.id=“simulation”)`除了不起作用之外。有什么想法吗?是的:
df%>%replicate(3,simplify=FALSE)%>%map\u-dfr(~sample\n(,5),.id=“simulation”)