好的,所以我知道我可以这样做,
mtcars %>%
group_by(cyl) %>%
sample_n(2)
Run Code Online (Sandbox Code Playgroud)
这会给我,
Source: local data frame [6 x 11]
Groups: cyl [3]
mpg cyl disp hp drat wt qsec vs am
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 21.4 4 121.0 109 4.11 2.780 18.60 1 1
2 33.9 4 71.1 65 4.22 1.835 19.90 1 1
3 18.1 6 225.0 105 2.76 3.460 20.22 1 0
4 21.0 6 160.0 110 3.90 2.875 17.02 0 1
5 15.2 8 304.0 150 3.15 3.435 17.30 0 0
6 10.4 8 460.0 215 3.00 5.424 17.82 0 0
# ... with 2 more variables: gear <dbl>, carb <dbl>
Run Code Online (Sandbox Code Playgroud)
所以每个气缸2个样品.这看起来很酷.但是,有一种方法可以设置匹配分组特征的唯一元素的大小矢量,因此对于4缸汽车,n = 1,对于6缸汽车,n = 10,等等?
谢谢!
这是在一个块中:
require(dplyr)
require(tidyr)
require(purrr)
sample_scheme <- data_frame(cyl = c(4,6,8),
n = c(1,5,3))
mtcars %>%
nest(-cyl) %>%
left_join(sample_scheme, by = "cyl") %>%
mutate(Sample = map2(data, n, sample_n)) %>%
unnest(Sample)
Run Code Online (Sandbox Code Playgroud)
分别做每个然后将它们绑定在一起。我假设你已经在 dplyr 中:
bind_rows(
mtcars %>%
group_by(cyl) %>%
filter(cyl==4) %>%
sample_n(1),
mtcars %>%
group_by(cyl) %>%
filter(cyl==6) %>%
sample_n(6))
Run Code Online (Sandbox Code Playgroud)
我们不能做 10 行 cyl==6 因为只有 6 行;)