【发布时间】:2014-10-15 11:40:13
【问题描述】:
这里是新手——我有一个包含大约 75,000 个观察值和 2000 个唯一 ID 的大型数据集。因此,每个 ID 大约有 37 个观察值。现在,我怎样才能随机抽取一个唯一 ID 样本,比如 4 个,这样我就有一个新的数据框,其中包含 4 个随机唯一 ID 及其对应的观测值,总共大约 150 个观测值?
【问题讨论】:
标签: r random unique sampling large-data
这里是新手——我有一个包含大约 75,000 个观察值和 2000 个唯一 ID 的大型数据集。因此,每个 ID 大约有 37 个观察值。现在,我怎样才能随机抽取一个唯一 ID 样本,比如 4 个,这样我就有一个新的数据框,其中包含 4 个随机唯一 ID 及其对应的观测值,总共大约 150 个观测值?
【问题讨论】:
标签: r random unique sampling large-data
这是一种通用方法。如果没有看到数据框的一部分,就不可能给出准确的说明。如果您的数据集命名为 m 并带有一个名为 ID 的列,那么您可以执行类似的操作
> idx <- sample(unique(m$ID), 4)
> m.reduced <- m[m$ID %in% idx, ]
【讨论】:
idx <- sample(unique(m$ID), 4).
如果您没有目标 ID 集,则可以使用以下方法提取一些:
theseIDs <- sample( unique(sample(dset$IDs, 100) ), 4)
您可能抽样不到 100 个来获得子样本,但这似乎不太可能因为唯一值不足而失败。
如果您打算从一组 dset$IDs 中构造一个编号为 150 的样本,该样本表示 4 个特定 ID 的分布,其值为 these_IDs,那么这可能是最简单的方法:
samp150 <- sample( dset$IDs[ dset$IDs %in% theseIDs] , 150 )
如果您正在考虑重复此过程(或扩展到其他项目集),其他方法可能是使用同名函数构建一个表,以获取概率,然后使用 theseIDs 进行替换采样表中的概率。
【讨论】:
library(dplyr)
## 4 is the subsample size
d_small <- ChickWeight %>% filter(Chick %in% sample(unique(Chick), 4))
【讨论】:
nlme 包,您似乎只是在加载以使用示例数据集。您可以只使用基础 R 中的一个数据集,这样其他人就不需要加载(并且可能安装)额外的包。
像这样:
df <- data.frame(id = gl(2000, 37), obs = runif(74000)) # Example data set
ids <- sample(levels(df$id), 4)
df.sub <- df[df$id %in% ids, ]
【讨论】: