R:有没有一种干净的方法来获得循环中获得的样本的单个数据帧?
R: Is there a clean way to obtain a single Data Frame of samples obtained in a loop?
我有一个庞大的数据集,其中包含关于 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))
}
能否分享一些以更好的方式做同样事情的想法?
提前致谢!
我认为当您已经使用 dplyr
时,您不需要使用 for 循环。 group_by
命令的存在是为了以更有效的方式完成您使用 for 循环所做的所有工作。
一个简单的例子是这样的:
library(dplyr)
dt = data.frame(mtcars)
dt %>% group_by(cyl) %>% sample_n(3)
为每个 cyl
值采样 3 行。
因此,请考虑 cyl
这是您的 ID
。像
your_dataset %>% group_by(ID) %>% sample_n(10)
会完成任务的。
作为@AntoniosKs 的替代答案,既然你有一个大数据集,为什么不考虑使用 data.table
。如果您的数据在 DT
中存储为数据 table,并且您想为每个 ID
抽样 10 个观测值,那么
library(data.table)
DT[, .SD[sample(.N,10)], by = ID]
应该会给你很大的加速。
我有一个庞大的数据集,其中包含关于 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))
}
能否分享一些以更好的方式做同样事情的想法?
提前致谢!
我认为当您已经使用 dplyr
时,您不需要使用 for 循环。 group_by
命令的存在是为了以更有效的方式完成您使用 for 循环所做的所有工作。
一个简单的例子是这样的:
library(dplyr)
dt = data.frame(mtcars)
dt %>% group_by(cyl) %>% sample_n(3)
为每个 cyl
值采样 3 行。
因此,请考虑 cyl
这是您的 ID
。像
your_dataset %>% group_by(ID) %>% sample_n(10)
会完成任务的。
作为@AntoniosKs 的替代答案,既然你有一个大数据集,为什么不考虑使用 data.table
。如果您的数据在 DT
中存储为数据 table,并且您想为每个 ID
抽样 10 个观测值,那么
library(data.table)
DT[, .SD[sample(.N,10)], by = ID]
应该会给你很大的加速。