随机抽样组

Big*_*ogg 7 r dplyr

给定一个df带有列的数据框group,如何k在dplyr中随机对其进行采样?它应该返回k组中的所有行(假设至少有k唯一值df$group),并且每个组df应该同样可能返回.

MrF*_*ick 16

只需使用sample()选择一些组

iris %>% filter(Species %in% sample(levels(Species),2))
Run Code Online (Sandbox Code Playgroud)

  • 如果您有字符或数字标识符列,则可以使用“unique(Species)”而不是“levels(Species)”。 (2认同)
  • 这是一个很好的解决方案,但我在这里遇到了一个问题,因为我希望使用与 %in% 语句不兼容的替换进行采样。 (2认同)

小智 8

如果您使用 dplyr,我认为这种方法最有意义:

iris_grouped <- iris %>% 
  group_by(Species) %>% 
  nest()
Run Code Online (Sandbox Code Playgroud)

其中产生:

# A tibble: 3 x 2
  Species    data             
  <fct>      <list>           
1 setosa     <tibble [50 × 4]>
2 versicolor <tibble [50 × 4]>
3 virginica  <tibble [50 × 4]>
Run Code Online (Sandbox Code Playgroud)

然后您可以使用它sample_n

iris_grouped %>%
  sample_n(2)

# A tibble: 2 x 2
  Species    data             
  <fct>      <list>           
1 virginica  <tibble [50 × 4]>
2 versicolor <tibble [50 × 4]>
Run Code Online (Sandbox Code Playgroud)

  • 我真的更喜欢这种语法,但在我的大型数据集上,该方法需要几个小时才能运行,而 @MrFlick 的答案只花了一秒钟。 (7认同)
  • 那太棒了。不要忘记最后使用 `unnest()` 进行进一步计算。 (2认同)