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

R:是否有一种干净的方法来获取循环中获得的样本的单个数据帧?,r,subset,R,Subset,我有一个巨大的数据集,包含大约1000个不同实体的观察结果。每个实体都有一个介于1和1000之间的ID,并且没有缺少的ID。由于数据集有100多万行,我想为每个实体获得一个包含10个随机观察值的子集,以便进行一些分析 下面的代码实现了这一点,但它看起来很麻烦,性能也很差 library(dplyr) # sample_n is a dplyr function samples <- sample_n(dataset[dataset$Entity == 1, ], 10) for (x in

我有一个巨大的数据集,包含大约1000个不同实体的观察结果。每个实体都有一个介于1和1000之间的ID,并且没有缺少的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))
}
library(dplyr)#sample#n是一个dplyr函数

示例我认为当您已经使用了
dplyr
时,不需要使用for循环。
group\u by
命令的存在是为了以更高效的方式完成for循环的所有工作

一个简单的例子是:

library(dplyr)

dt = data.frame(mtcars)

dt %>% group_by(cyl) %>% sample_n(3)
为每个
cyl
值采样3行

>,考虑<代码> Cyl < /Cord>这里是您的<代码> ID >代码>。差不多

your_dataset %>% group_by(ID) %>% sample_n(10)

将完成这项工作。

我认为当您已经使用了
dplyr
时,不需要使用for循环。
group\u by
命令的存在是为了以更高效的方式完成for循环的所有工作

一个简单的例子是:

library(dplyr)

dt = data.frame(mtcars)

dt %>% group_by(cyl) %>% sample_n(3)
为每个
cyl
值采样3行

>,考虑<代码> Cyl < /Cord>这里是您的<代码> ID >代码>。差不多

your_dataset %>% group_by(ID) %>% sample_n(10)

将执行.< /P> < P>作为@ ANDIONSKS的替代方案,为什么不考虑使用<代码>数据?表< /代码>现在,您有一个大的数据集。如果您的数据作为数据表存储在

DT
中,并且您希望为每个
ID
采集10个观察值,则

library(data.table)

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

应该给你一个实质性的加速。

< P>作为@ ANDIONSKS的一个替代方案,为什么不考虑使用<代码>数据。表< /代码>现在你有一个大的数据集。如果您的数据作为数据表存储在
DT
中,并且您希望为每个
ID
采集10个观察值,则

library(data.table)

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

应该会给你一个很大的提速。

谢谢@AntoniosK,这就是我想要的!谢谢@AntoniosK,这就是我要找的!