2

我有一个由 2000 个人组成的数据集。对于每个个体,i:2000数据集包含n重复的情况。用d表示这个数据集, 的每一行都由和d索引。在其他变量中,有一个变量在不同(情况)行中对个人具有相同的值。 indpid


考虑到数据的面板性质,我想重新采样d(如引导程序):

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

我考虑使用该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是针对第二人的不同观察结果。

4

1 回答 1

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.call对上面代码处理不好的重复项的组合rbind和处理。lapply因此,此代码不是生成具有可能不同长度的数据帧,而是为每个采样生成一个数据帧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)
于 2013-06-24T16:35:18.650 回答