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

如何基于变量非NA观测数筛选州后合并两个数据集?

数据集合并与州级筛选解决方案

需求说明

需要合并两个共享State(州)和Year(年份)字段的数据集:df1包含变量X1,df2包含变量X2。筛选规则为:

  • 仅保留**X1非NA观测数≥2且X2非NA观测数≥2**的州
  • 保留这些州的所有年份记录,即便该年份的X1和X2均为NA

问题分析

直接使用inner_join(df1, df2)无法满足需求,因为它仅匹配两个数据集在State和Year同时存在的记录,无法基于州级别的非NA观测数量进行筛选。

解决方案代码

# 加载dplyr包(若未安装,先执行 install.packages("dplyr"))
library(dplyr)

# 示例数据集
df1 = read.table(
  text =
    "State Year X1
A 1 NA 
A 2 NA 
A 3 5 
A 4 NA 
B 1 NA 
B 2 NA 
B 3 4 
B 4 3", header = TRUE)

df2 = read.table(
  text =
    "State Year X2
A 1 NA 
A 2 5 
A 3 7 
A 4 NA 
B 1 NA 
B 2 2 
B 3 5 
B 4 7", header = TRUE)

# 1. 统计每个州的X1非NA观测数
state_x1_count <- df1 %>%
  group_by(State) %>%
  summarise(x1_non_na = sum(!is.na(X1)))

# 2. 统计每个州的X2非NA观测数
state_x2_count <- df2 %>%
  group_by(State) %>%
  summarise(x2_non_na = sum(!is.na(X2)))

# 3. 筛选符合条件的州(此处阈值设为2,实际使用时可改为5)
valid_states <- state_x1_count %>%
  inner_join(state_x2_count, by = "State") %>%
  filter(x1_non_na >= 2, x2_non_na >= 2) %>%
  pull(State)

# 4. 合并数据集并保留有效州的所有记录
newdf <- df1 %>%
  full_join(df2, by = c("State", "Year")) %>%
  filter(State %in% valid_states)

# 输出结果
print(newdf)

代码解释

  1. 统计非NA数量:通过group_by(State)按州分组,sum(!is.na(X))计算每个州对应变量的非NA观测数
  2. 筛选有效州:合并两个统计结果,过滤出同时满足X1和X2非NA数达标州,提取州列表
  3. 合并与过滤:用full_join合并原始数据集(保留所有State和Year的组合),再过滤出有效州的所有记录

执行后得到的newdf与示例目标结果完全一致:排除州A(X1仅1个非NA观测),保留州B的所有年份记录。

内容的提问来源于stack exchange,提问作者Jens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:15:38