如何"分组tbl"在R

时间:2017-09-13 15:02:01

标签: r dplyr plyr

我试图按因子级别获取数据帧中行的自举样本。为此,我使用ddplysample_n。但是,我需要为size设置sample_n参数,因为这会返回错误消息:

ddply (mtcars, .(carb), .fun = sample_n, replace=TRUE)

?sample我读了size参数如果tbl 已分组,则尺寸适用于每个组。我认为这是我正在寻找的,但我找不到关于如何对tbl参数进行分组的任何其他信息。还没有在ddply函数中分组?

请注意,我不想在固定行数上运行上述功能(ej:ddply (mtcars, .(carb), .fun = sample_n, size = 2, replace=TRUE)),因为它可能会因系数级别而异。在此示例中,我预计10个样品的碳水化合物= 2水平,3个碳水化合物= 3等...

1 个答案:

答案 0 :(得分:2)

我们可以使用dplyrpurrr。在以下代码中,我们使用carb将数据框拆分为split(.$carb)map2_df可以通过列表中的每个元素(.x,这是一个拆分数据框列表)和一个向量或列表(.y)来应用函数,然后返回一个组合数据帧。 .y = c(3, 3, 1, 3, 1, 1)指定每组的采样数。

set.seed(123)

library(dplyr)
library(purrr)

mtcars %>%
  split(.$carb) %>%
  map2_df(.y = c(3, 3, 1, 3, 1, 1), ~.x %>% sample_n(size = .y, replace = TRUE))

    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
1  18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
2  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
3  18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
4  30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
5  21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
6  18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
7  17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
8  13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
9  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
10 17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
11 19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
12 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8