将sample()应用于数据框列表

时间:2014-08-03 01:56:56

标签: r

我正在做一个项目,我试图从一组相关研究中随机选择个别研究。我成功地在相关研究的数据框中划分了一个主数据文件。

##Subset by independent study, determined by integer assignment in column 18
tmp <- split(DATAFILE, DATAFILE$V18)
lapply(1:length(tmp), 
       function(x) assign(paste("study.", x, sep = ""), 
                          tmp[[x]], envir = .GlobalEnv))

现在我想从每个数据框中获取一个randow行,但我无法使其工作。 我试过一个for循环,它告诉我&#34;找不到功能我&#34;:

random <-NULL
   for (i in tmp){
   i(sample(nrow(i)), 1,)
   random<-rbind(random,i)
   print(df)
}

我想将每个数据帧中的1行随机样本放入一个新的数据框中,所以我尝试了一下#/ p>

sapply(df.list, function(x) sample(nrow(i), 1,))

哪个也不起作用。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

最好将数据保存在列表中,而不是将一堆对象分配给工作区。您的sapply很接近,但这只会为您提供列表中每个数据集所需的随机行的索引。

接下来,您需要从列表中的每个数据集中选择采样行,因此可以使用lapply返回行列表,并将它们全部绑定在一起:

datl <- split(mtcars, f = mtcars$gear)

idx <- sapply(datl, function(x) sample(nrow(x), 1))

do.call(rbind, lapply(1:3, function(x) datl[[x]][idx[x], ]))

                   mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Chrysler Imperial 14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Honda Civic       30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Ferrari Dino      19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6