创建引导样本并以不同的名称存储采样数据

时间:2013-08-26 13:01:01

标签: r

使用以下代码从数据框datta创建引导样本时

boot1a <- replicate(3, do.call("rbind", lapply(sample(unique(datta$pid),2000,replace=TRUE), function(x) datta[datta$pid==x,])), simplify=FALSE)
boot1b <- data.frame(boot1a) # data frame from the list
sample1 <- boot1b[order(boot1b$pid),] # sorting based on pid and storing 

引导样本sample1中的变量的名称以.1, .2, .3, ...结尾。 (pid是人员ID,它对同一个人的不同观察采用相似的值)。例如,使用上面的代码,xy中的变量datta将具有与第一个,第二个和第二个相关联的名称xyxy.1xy.2第三个bootstrap样本。我宁愿让不同的bootstrap样本命名不同,每个变量名都保留与原始数据框中的变量名相同。在上面的例子中,我想要的是存储在三个不同数据帧中的自举样本,比如boot1, boot2, boot3,其中每个数据帧中的变量名称与原始数据帧中的变量名称相同。我开始一次手动进行一次复制,但是要花费大量时间来创建许多自举样本。有人建议如何以更好的方式做到这一点吗?

修改 数据框datt中许多变量中的四个变量的前几个观察结果如下。

    pid xy  zy  wy
     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

1 个答案:

答案 0 :(得分:2)

以下是示例示例:

数据

set.seed(123)
data<-rnorm(100, 160, 20)
data1<-as.data.frame(matrix(data, nrow = 20, ncol = 5, byrow = FALSE))
n<-5
data2<-do.call("rbind", replicate(n, data1, simplify=FALSE))
data2$fac<-as.factor(rep(1:n,each=20))

<强>取样

library(plyr)
sample1<-ddply(data2,.(fac),summarize, mysample=sample((1:length(fac)),size=1,replace=TRUE))
  fac mysample
1   1       18
2   2       14
3   3       13
4   4       20
5   5       14