【问题标题】:generate bootstrap sample dependent on column根据列生成引导样本
【发布时间】:2019-03-08 07:50:16
【问题描述】:

我有一个这样的数据集

set.seed(1)
df <- data.frame(ID = rep(1:4, each = 3),
                 x = c(1,2,3,2,3,4,1,2,3,3,4,5),
                 V1 = rnorm(12))

> df
   ID x         V1
1   1 1 -0.6264538
2   1 2  0.1836433
3   1 3 -0.8356286
4   2 2  1.5952808
5   2 3  0.3295078
6   2 4 -0.8204684
7   3 1  0.4874291
8   3 2  0.7383247
9   3 3  0.5757814
10  4 3 -0.3053884
11  4 4  1.5117812
12  4 5  0.3898432

此示例包含 4 个个体,由 ID 定义。 每个人都有一个观察期x。例如,在时间点 1、2、3 观察到 ID 1。

在这个例子中,我在时间点 1 有 2 个观察值(ID 1 和 ID 3), 和时间点 2 的 3 个观察值(ID 1、2、3)

我现在想要一个自举(带替换的样本)数据集,该数据集在每个时间点包含相同数量的观测值。

在本例中,数据集可能如下所示:

> df
   ID x         V1
1   1 1 -0.6264538
1   1 1 -0.6264538
2   1 2  0.1836433
2   1 2  0.1836433
3   1 3 -0.8356286
4   2 2  1.5952808
5   2 3  0.3295078
6   2 4 -0.8204684
6   2 4 -0.8204684
7   3 1  0.4874291
7   3 1  0.4874291
8   3 2  0.7383247
9   3 3  0.5757814
10  4 3 -0.3053884
11  4 4  1.5117812
11  4 4  1.5117812
12  4 5  0.3898432
12  4 5  0.3898432
12  4 5  0.3898432
12  4 5  0.3898432

这个数据集现在在每个时间点有 4 个观测值。

【问题讨论】:

    标签: r dplyr sampling resampling


    【解决方案1】:

    我们可以首先找到每个xreplace = TRUE 出现xsample_n 的最大次数,以获得每个x 的相同行数。

    max_sample <- max(table(df$x))
    
    library(dplyr)
    
    df %>%
      group_by(x) %>%
      sample_n(max_sample, replace = TRUE) %>%
      arrange(x)
    
    #      ID     x     V1
    #   <int> <dbl>  <dbl>
    # 1     3     1  0.487
    # 2     1     1 -0.626
    # 3     1     1 -0.626
    # 4     1     1 -0.626
    # 5     3     2  0.738
    # 6     2     2  1.60 
    # 7     2     2  1.60 
    # 8     3     2  0.738
    # 9     4     3 -0.305
    #10     2     3  0.330
    #11     2     3  0.330
    #12     4     3 -0.305
    #13     4     4  1.51 
    #14     4     4  1.51 
    #15     4     4  1.51 
    #16     4     4  1.51 
    #17     4     5  0.390
    #18     4     5  0.390
    #19     4     5  0.390
    #20     4     5  0.390
    

    【讨论】:

    • 谢谢,我要补充一点,x 并不总是以 1 开头,范围从 -20 到 +20
    • @spore234 嗯......我认为这不重要,因为我们正在计算 xtable 的频率,而不管它的价值是什么。
    猜你喜欢
    • 2014-10-16
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多