使用面板尺寸重新采样数据框

时间:2013-06-24 11:53:11

标签: r

我有一个由2000个人组成的数据集。对于每个人i:2000,数据集包含n重复的情况。让d表示此数据集,d的每一行都由in编制索引。在其他变量中,d具有变量pid,它在不同(情境)行中为个体获取相同的值。


考虑到数据的面板性质,我想重新采样d(如在bootstrap中):

  • 有替换,
  • 将每个重新采样数据存储为数据框

我考虑使用sample功能但无法使其正常工作。我是r的新用户,没有编程技巧。

数据集由许多变量组成,但所有变量都有数值。数据集如下。

    pid x   y   z
     1  10  2   -5
     1  12  3   -4.5
     1  14  4   -4
     1  16  5   -3.5
     1  18  6   -3
     1  20  7   -2.5
     2  22  8   -2
     2  24  9   -1.5
     2  26  10  -1
     2  28  11  -0.5
     2  30  12  0
     2  32  13  0.5

前六行是针对第一个人的pid=1,而下一个性别行pid=2是针对第二个人的不同观察。

1 个答案:

答案 0 :(得分:0)

这应该适合你:

z <- replicate(100,
               d[d$pid %in% sample(unique(d$pid), 2000, replace=TRUE),],
               simplify = FALSE)

结果z将是您可以执行任何操作的数据框列表。

编辑:这有点罗嗦,但会处理重复的行。 replicate明显用于执行给定次数的设置操作(在下面的示例中为4)。然后我sample pid的唯一值(在这种情况下为3个这些值,替换)并提取与每个采样值对应的d行。 do.callrbindlapply的组合处理上述代码无法很好处理的重复项。因此,此代码不是生成具有可能不同长度的数据帧,而是为每个采样pid生成数据帧,然后在do.call("rbind",...)的每次迭代中使用replicate将它们重新组合在一起。

z <- replicate(4, do.call("rbind", lapply(sample(unique(d$pid),3,replace=TRUE),
                                     function(x) d[d$pid==x,])),
                                     simplify=FALSE)