使用嵌套结构从数据框创建随机样本

Aur*_*ese 3 r sample

这个问题来自这里发现的SO帖子

我试图使用嵌套条件提取数据框中的行的随机样本.

使用以下虚拟数据集(已修改iris):

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          5.3         2.9          1.5         0.2  setosa
5          5.2         3.7          1.3         0.2  virginica
6          4.7         3.2          1.5         0.2  virginica
7          3.9         3.1          1.4         0.2  virginica
8          4.7         3.2          1.3         0.2  virginica
9          4.0         3.1          1.5         0.2  versicolor
10         5.0         3.6          1.4         0.2  versicolor
11         4.6         3.1          1.5         0.2  versicolor
12         5.0         3.6          1.5         0.2  versicolor
Run Code Online (Sandbox Code Playgroud)

下面的代码可以很好地采用2行的简单示例:

iris[sample(nrow(iris), 2), ]
Run Code Online (Sandbox Code Playgroud)

但是,我想要做的是为特定变量的每个级别采集2行样本.例如,为变量'Species'的每个级别创建一个2行的随机样本,如下所示:

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
4          5.3         2.9          1.5         0.2  setosa
6          4.7         3.2          1.5         0.2  virginica
7          3.9         3.1          1.4         0.2  virginica
11         4.6         3.1          1.5         0.2  versicolor
12         5.0         3.6          1.5         0.2  versicolor
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Gre*_*gor 5

很容易dplyr:

library(dplyr)
iris %>%
    group_by(Species) %>%
    sample_n(size = 2)

#   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
# 1          4.6         3.4          1.4         0.3     setosa
# 2          5.2         3.5          1.5         0.2     setosa
# 3          6.5         2.8          4.6         1.5 versicolor
# 4          5.7         2.8          4.5         1.3 versicolor
# 5          5.8         2.8          5.1         2.4  virginica
# 6          7.7         2.6          6.9         2.3  virginica
Run Code Online (Sandbox Code Playgroud)

您可以根据需要分组尽可能多的列

CO2 %>% group_by(Type, Treatment) %>% sample_n(size = 2)
Run Code Online (Sandbox Code Playgroud)