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

如何使用dplyr::inner_join保留特定非共现观测值

解决方案:强制保留指定观测的内连接变种

这个需求很实用,核心是既要保留两个表共现country的合并观测,又要强制保留所有col_of_strings等于dont_leave_me_behind的原始观测(无论country是否在另一个表中存在)。下面是两种简洁的实现方式:

方式一:拆分合并(直观易懂)

先分别提取需要强制保留的行,再合并常规内连接的结果,逻辑清晰:

library(dplyr)

# 1. 从两个表中提取需要强制保留的观测
force_keep_rows <- bind_rows(
  df_population %>% filter(col_of_strings == "dont_leave_me_behind"),
  df_gdp %>% filter(col_of_strings == "dont_leave_me_behind")
)

# 2. 执行常规的内连接,保留共现country的合并观测
inner_join_result <- inner_join(df_population, df_gdp, by = "country")

# 3. 合并所有结果,缺失的列自动补NA
final_data <- bind_rows(inner_join_result, force_keep_rows) %>%
  arrange(country) # 可选:按country排序,方便查看

方式二:全连接+筛选(更紧凑)

用full_join先合并所有行,再通过筛选条件直接保留我们需要的观测,代码更简洁:

library(dplyr)

final_data <- full_join(df_population, df_gdp, by = "country") %>%
  filter(
    # 保留两表共现country的合并观测(即原inner_join的结果)
    !is.na(population) & !is.na(gdp_growth) |
    # 保留df_population中需要强制保留的行
    (!is.na(col_of_strings.x) & col_of_strings.x == "dont_leave_me_behind") |
    # 保留df_gdp中需要强制保留的行
    (!is.na(col_of_strings.y) & col_of_strings.y == "dont_leave_me_behind")
  ) %>%
  arrange(country)

结果说明

最终的final_data会包含:

  • 所有country在两个表中都存在的合并观测(和inner_join结果一致)
  • df_population中col_of_strings为dont_leave_me_behind的所有行(即使country不在df_gdp中,比如示例中的巴西)
  • df_gdp中col_of_strings为dont_leave_me_behind的所有行(即使country不在df_population中,或者已经在合并结果里,比如示例中的澳大利亚)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:34:29