R:是否有一种干净的方法来获得循环中获得的样本的单个数据框?

时间:2015-10-03 21:02:22

标签: r subset

我有一个庞大的数据集,其中包含有关1000个不同实体的观察结果。每个实体的ID介于1和1000之间,并且没有丢失的ID。由于数据集的行数超过100万,我想获得一个子集,每个实体有10个随机观察值进行分析。

以下代码可以解决这个问题,但它看起来很麻烦且性能很差。

library(dplyr) # sample_n is a dplyr function
samples <- sample_n(dataset[dataset$Entity == 1, ], 10)
for (x in 2:1000) {
  samples <- rbind(samples, sample_n(dataset[dataset$Entity == x, ], 10))
}

请你以更好的方式分享一些想法吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

我认为您在使用group_by时不需要使用for循环。 library(dplyr) dt = data.frame(mtcars) dt %>% group_by(cyl) %>% sample_n(3) 命令用于以更有效的方式完成您对for循环的所有工作。

一个简单的例子是:

cyl

为每个cyl值抽取3行。

因此,请考虑ID这是您的your_dataset %>% group_by(ID) %>% sample_n(10) 。像

这样的东西
UITextField

将完成这项工作。

答案 1 :(得分:2)

作为@AntoniosKs的替代方案,为什么不考虑使用data.table现在您拥有大型数据集。如果您的数据作为数据表存储在DT中,并且您希望为每个ID抽样10个观察值,那么

library(data.table)

DT[, .SD[sample(.N,10)], by = ID]

应该给你一个大幅度的加速。