【问题标题】:R: sample with different sample sizes for groupsR:具有不同样本大小的样本
【发布时间】:2021-02-23 10:44:47
【问题描述】:

我有一个包含 2 个分组列 V1 和 V2 的数据框。我想为 V1 中的每个不同值准确采样 n = 4 个元素,并确保对 V2 中每个不同元素的最小 m = 1 进行采样。

library(tidyverse)
set.seed(1)
df = data.frame(
  V1 = c(rep("A",6), rep("B",6)),
  V2 = c("C","C","D","D","E","E","F","F","G","G","H","H"),
  V3 = rnorm(12)
)

df
   V1 V2         V3
1   A  C -0.6264538
2   A  C  0.1836433
3   A  D -0.8356286
4   A  D  1.5952808
5   A  E  0.3295078
6   A  E -0.8204684
7   B  F  0.4874291
8   B  F  0.7383247
9   B  G  0.5757814
10  B  G -0.3053884
11  B  H  1.5117812
12  B  H  0.3898432

我想要的输出是例如...

V1    V2        V3
1 A     C     -0.626
2 A     D     -0.836
3 A     E     -0.820
4 A     E      0.329
5 B     F      0.487
6 B     G      0.576
7 B     G     -0.305
8 B     H      0.390

我不知道如何生成这个输出。当我按 V1 和 V2 分组时,我会为 V1 中的每个不同值得到 n = 3 个元素。

df %>%
  group_by(V1,V2) %>%
  sample_n(1)

  V1    V2        V3
1 A     C     -0.626
2 A     D     -0.836
3 A     E     -0.820
4 B     F      0.487
5 B     G      0.576
6 B     H      0.390

“splitstackshape”或“采样”包没有帮助。

【问题讨论】:

    标签: r dataframe sampling


    【解决方案1】:

    这是一种方法:

    library(dplyr)
    
    nr <- 4
    first_pass <- df %>% group_by(V1, V2) %>% sample_n(1) %>% ungroup
    
    first_pass %>% 
      count(V1) %>% 
      mutate(n = nr - n) %>%
      left_join(df, by = 'V1') %>%
      group_by(V1) %>%
      sample_n(first(n)) %>%
      select(-n) %>%
      bind_rows(first_pass) %>%
      arrange(V1, V2)
    
    #  V1    V2        V3
    #  <chr> <chr>  <dbl>
    #1 A     C      0.184
    #2 A     D     -0.836
    #3 A     E     -0.820
    #4 A     E     -0.820
    #5 B     F      0.487
    #6 B     F      0.738
    #7 B     G     -0.305
    #8 B     H      0.390
    

    逻辑是先为V1V2各随机选择1行。然后,我们为每个V1 计算需要多少行才能获得nr 行,并从每个V1 中随机抽取它们并组合最终数据集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-11
      • 2015-03-21
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 2020-07-13
      相关资源
      最近更新 更多