【问题标题】:How to extract a sample of pairs in grouping variable如何在分组变量中提取对样本
【发布时间】:2017-12-09 07:17:52
【问题描述】:

我的数据如下所示:

x  y 
1  1
2  2
3  2
4  4
5  5
6  6
7  6
8  8
9  9 
10  9
11  11
12  12
13  13
14  13
15  14
16  15
17  14
18  16
19  17
20  18

y 是一个分组变量。我想看看这个分组进行得如何。 因此,我想提取由变量 y 组合在一起的 n 对案例的样本 和 n 对未按变量 y 组合在一起的案例。为了计算数量 误报和误报(错误分组或不分组)。如何提取分组对的样本 和未分组对的样本?

我希望样本看起来像这样(对于 n=6): 分组样本:

x  y
2  2
3  2
9  9
10  9
15  14
17  14

未分组样本:

x  y
1  1
2  2
6  8
6  8
11  11
19  17

我将如何在 R 中解决这个问题?

【问题讨论】:

    标签: r


    【解决方案1】:

    我并不完全清楚你喜欢做什么,部分原因是我觉得你想要实现的目标缺少一些背景信息。我也不太了解您的预期输出(例如,未分组的样本包含一个条目6 8,但您的原始数据中不存在...)

    除此之外,这是一种可能的方法。

    # Maximum number of samples per group
    n <- 3;
    
    # Set fixed RNG seed for reproducibility
    set.seed(2017);
    
    # Grouped samples
    df.grouped <- do.call(rbind.data.frame, lapply(split(df, df$y),
        function(x) if (nrow(x) > 1) x[sample(min(n, nrow(x))), ]));
    df.grouped;
    #       x  y
    #2.3    3  2
    #2.2    2  2
    #6.6    6  6
    #6.7    7  6
    #9.10  10  9
    #9.9    9  9
    #13.13 13 13
    #13.14 14 13
    #14.15 15 14
    #14.17 17 14
    
    
    # Ungrouped samples
    df.ungrouped <- df[sample(nrow(df.grouped)), ];
    df.ungrouped;
    #    x y
    #7   7 6
    #1   1 1
    #9   9 9
    #4   4 4
    #3   3 2
    #2   2 2
    #5   5 5
    #6   6 6
    #10 10 9
    #8   8 8
    

    解释:根据y拆分df,然后从包含&gt;1行的子集x中抽取min(n, nrow(x))样本; rbinding 给出分组的df.grouped。然后我们从df 中抽取nrow(df.grouped) 样本以生成未分组的df.ungrouped


    样本数据

    df <- read.table(text =
        "x  y
         1  1
         2  2
         3  2
         4  4
         5  5
         6  6
         7  6
         8  8
         9  9
         10  9
         11  11
         12  12
         13  13
         14  13
         15  14
         16  15
         17  14
         18  16
         19  17
         20  18", header = T)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      相关资源
      最近更新 更多