R:是否有一种干净的方法来获取循环中获得的样本的单个数据帧?
我有一个巨大的数据集,包含大约1000个不同实体的观察结果。每个实体都有一个介于1和1000之间的ID,并且没有缺少的ID。由于数据集有100多万行,我想为每个实体获得一个包含10个随机观察值的子集,以便进行一些分析 下面的代码实现了这一点,但它看起来很麻烦,性能也很差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
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,这就是我要找的!