【问题标题】:Creating a random sample from a dataframe with a nested structure从具有嵌套结构的数据框中创建随机样本
【发布时间】:2015-03-17 21:36:27
【问题描述】:

这个问题建立在 SO 帖子 found here

我正在尝试使用嵌套条件提取数据框中的随机行样本。

使用以下虚拟数据集(修改自 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

下面的代码可以很好地获取 2 行的简单样本:

iris[sample(nrow(iris), 2), ]

但是,我想做的是为特定变量的每个级别抽取 2 行样本。例如,为变量“物种”的每个级别创建 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

感谢您的帮助!

【问题讨论】:

标签: r sample


【解决方案1】:

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

您可以根据需要按任意多列进行分组

CO2 %>% group_by(Type, Treatment) %>% sample_n(size = 2)

【讨论】:

  • 谢谢格雷戈尔!非常优雅 ;-) 如果我在 Species 中嵌套了另一个变量怎么办?有没有办法在 group_by 参数中指定?
  • 是的,请参阅编辑。您可以根据需要按任意数量的变量进行分组。
猜你喜欢
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
相关资源
最近更新 更多