我试图按因子级别获取数据帧中行的自举样本。为此,我使用ddply
和sample_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等...
答案 0 :(得分:2)
我们可以使用dplyr
和purrr
。在以下代码中,我们使用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