我有一个由2000个人组成的数据集。对于每个人i:2000
,数据集包含n
重复的情况。让d
表示此数据集,d
的每一行都由i
和n
编制索引。在其他变量中,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
是针对第二个人的不同观察。
答案 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.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)