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

R语言中如何根据左表指示变量的值对两个表执行条件左连接

解决方案

核心逻辑是根据almanac_flag对应的年份规则,把d2的双列id映射合并为统一的id-description映射表,再和主表d关联即可,以下是两种常用实现方式:


方案1:重构d2为统一匹配表(代码更简洁,推荐)

先把d2的宽表结构转为长表,生成所有id和运动员描述的对应关系,直接左连接即可:

library(tidyverse)

# 生成统一的id-描述映射表
d2_mapping <- d2 %>%
  pivot_longer(cols = c(card_id_1999, card_id_2009),
               values_to = "card_id") %>%
  select(card_id, description)

# 直接关联得到结果
result <- d %>%
  left_join(d2_mapping, by = "card_id")

方案2:两次左连接后合并结果列

如果不想改d2的结构,可以分别按两个规则关联后,合并描述字段:

result <- d %>%
  # 先匹配1999版年鉴对应的id
  left_join(d2 %>% select(card_id_1999, description), 
            by = c("card_id" = "card_id_1999")) %>%
  # 再匹配2009版年鉴对应的id
  left_join(d2 %>% select(card_id_2009, description), 
            by = c("card_id" = "card_id_2009"),
            suffix = c("_1999", "_2009")) %>%
  # 合并两个描述列,优先保留非空值
  mutate(description = coalesce(description_1999, description_2009)) %>%
  # 清除中间生成的临时字段
  select(-description_1999, -description_2009)

两种方案输出的结果完全符合需求:card_id为48、2100、F7的行对应运动员描述,剩余未匹配的行description字段为NA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 06:24:02