【问题标题】:Applying sample() to a list of data frames将 sample() 应用于数据框列表
【发布时间】:2014-09-25 21:05:15
【问题描述】:

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

##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))

现在我想从这些数据帧中的每一个中取出一个随机行,但我无法让它工作。 我尝试了一个 for 循环,它告诉我“找不到函数 i”:

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

我想将每个数据帧中的 1 行随机样本放入一个新的数据帧中,所以我尝试了 sapply

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

这也不起作用。

感谢您的帮助

【问题讨论】:

  • 尝试data[sample(nrow(data), n), ] 对行进行采样。

标签: r


【解决方案1】:

将数据保存在列表中比将一堆对象分配给工作区要好得多。您的 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

【讨论】:

    猜你喜欢
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多