如何根据Exposed数据集的Birth_Year分布过滤Unexposed数据集
匹配Unexposed数据集的Birth_Year分布至Exposed数据集
核心思路
要让Unexposed的Birth_Year分布与Exposed完全一致,需完成三个关键步骤:
- 统一两个数据集的Birth_Year数据类型(Exposed为字符型,Unexposed为整数型)
- 统计Exposed中每个出生年份的个体数量
- 从Unexposed对应年份中抽取相同数量的样本
完整代码实现
首先加载dplyr包(未安装则先运行install.packages("dplyr")):
library(dplyr)
1. 统一数据类型
# 将Exposed的Birth_Year转为整数型,与Unexposed保持一致 exposed <- exposed %>% mutate(Birth_Year = as.integer(Birth_Year))
2. 统计Exposed的年份分布
# 计算每个出生年份需要抽取的样本量 year_sample_counts <- exposed %>% count(Birth_Year, name = "sample_size")
3. 抽取匹配样本
# 按年份分组,抽取对应数量的样本 matched_unexposed <- unexposed %>% group_by(Birth_Year) %>% sample_n( size = year_sample_counts$sample_size[year_sample_counts$Birth_Year == cur_group()$Birth_Year], replace = FALSE # 不重复抽取同一个体 ) %>% ungroup()
4. 验证匹配结果
运行以下代码确认两个数据集的年份分布完全一致:
# 查看Exposed的年份分布 exposed %>% count(Birth_Year) # 查看匹配后Unexposed的年份分布 matched_unexposed %>% count(Birth_Year)
注意事项
- 若Unexposed中某年份的个体数量少于Exposed对应年份的数量,
sample_n会报错。但你提到Unexposed规模远大于Exposed,因此无需担心此问题。 - 若需要可重复的随机抽样结果,可在代码开头添加
set.seed(123)(123可替换为任意整数)。
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

