You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:05:39