【发布时间】:2014-09-19 15:31:26
【问题描述】:
我有一个非常大的数据框 (N = 107,251),我希望将其分成相对相等的两半 (~53,625)。但是,我希望进行拆分,以使三个变量在两组中保持相等的比例(与性别、6 个级别的年龄类别和 5 个级别的区域有关)。
我可以独立(例如,通过prop.table(xtabs(~dat$Gender)))或组合(例如,通过prop.table(xtabs(~dat$Gender + dat$Region + dat$Age))生成变量的比例,但我不确定如何利用这些信息来实际进行抽样。
样本数据集:
set.seed(42)
Gender <- sample(c("M", "F"), 1000, replace = TRUE)
Region <- sample(c("1","2","3","4","5"), 1000, replace = TRUE)
Age <- sample(c("1","2","3","4","5","6"), 1000, replace = TRUE)
X1 <- rnorm(1000)
dat <- data.frame(Gender, Region, Age, X1)
概率:
round(prop.table(xtabs(~dat$Gender)), 3) # 48.5% Female; 51.5% Male
round(prop.table(xtabs(~dat$Age)), 3) # 16.8, 18.2, ..., 16.0%
round(prop.table(xtabs(~dat$Region)), 3) # 21.5%, 17.7, ..., 21.9%
# Multidimensional probabilities:
round(prop.table(xtabs(~dat$Gender + dat$Age + dat$Region)), 3)
这个虚拟示例的最终目标是两个数据框,每个数据框大约有 500 个观察值(完全独立,没有参与者出现在两者中),并且在性别/地区/年龄划分方面大致相等。在实际分析中,年龄和区域权重之间存在更大的差异,因此进行单个随机拆分是不合适的。在现实世界的应用中,我不确定是否需要使用每个观察值,或者是否最好让分割更均匀。
我一直在阅读来自 package:sampling 的文档,但我不确定它是否完全符合我的要求。
【问题讨论】:
-
参见
caret包中的createDataPartition以及this SO question。