【问题标题】:R - keep random rows per group, but different numbers per groupR - 每组保持随机行,但每组不同的数字
【发布时间】:2020-04-30 07:34:48
【问题描述】:

dplyr 包中的 sample_n() 函数允许随机保留特定数量的行。结合 group_by(),您可以例如每组保留 2 个观察值:

mtcars %>% 
  select(vs, drat) %>% 
  group_by(vs) %>% 
  sample_n(2)

# A tibble: 4 x 2
# Groups:   vs [2]
     vs  drat
  <dbl> <dbl>
1     0  3.07
2     0  3.9 
3     1  4.22
4     1  3.08

问题有没有一种简单的方法可以为每组选择不同数量的观察值?例如,如果我想为第一组保留 2 个观察结果,为第二组保留 3 个观察结果。如果我给函数sample_n()一个向量,它只使用第一个值(结果同上)。

mtcars %>% 
  select(vs, drat) %>% 
  group_by(vs) %>% 
  sample_n(c(2,3))

提前致谢。

【问题讨论】:

    标签: r random group-by dplyr


    【解决方案1】:

    使用 group_nest() 创建每个组的列表列,在每个组中添加一个包含您想要的样本数的列,然后将这两列映射到 sample_n() 函数:

    library(tidyverse)
    
    
    
    mtcars %>% 
      select(vs, drat) %>% 
      group_nest(vs, keep= TRUE)  %>%
      add_column(mysamples = c(2,3)) %>% 
      mutate(sampled  = map2(data , mysamples, ~ sample_n(.x, .y))) %>%
      .$sampled %>%
      bind_rows()
    
    
    # A tibble: 5 x 2
         vs  drat
      <dbl> <dbl>
    1     0  3.15
    2     0  4.22
    3     1  3.7 
    4     1  4.93
    5     1  3.08
    > 
    

    【讨论】:

      猜你喜欢
      • 2014-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多