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

R语言新手求助:如何高效匹配两个数据框生成目标数据框?

R语言数据匹配解决方案

先模拟你的三个数据框(方便直接运行演示):

# 1. ID与Distance映射表
id_dist <- data.frame(
  ID = c("A", "B", "C", "D", "E"),
  Distance = c(30, 50, 300, 120, 50)
)

# 2. 年份-各Distance对应数值表
year_dist_vals <- data.frame(
  Year = c(2020, 2021, 2022),
  "30" = c(10, 12, 15),
  "50" = c(20, 22, 25),
  "120" = c(30, 32, 35),
  "300" = c(40, 42, 45)
)

# 3. 目标空表(Year+ID)
target_df <- expand.grid(Year = c(2020, 2021, 2022), ID = c("A", "B", "C", "D", "E"))

核心操作步骤

不用写复杂的双重循环,用tidyverse包的函数就能轻松搞定:

  1. 把宽格式的年份数值表转成长格式
    把Distance从列名转成单独一列,方便后续匹配:
library(tidyverse)

year_dist_long <- year_dist_vals %>%
  pivot_longer(cols = -Year, names_to = "Distance", values_to = "Value") %>%
  mutate(Distance = as.numeric(Distance)) # 转成数值型,和ID映射表的Distance类型统一
  1. 两次关联匹配填充目标表
    先给目标表的每个ID匹配对应的Distance,再用Year和Distance匹配对应数值:
result <- target_df %>%
  left_join(id_dist, by = "ID") %>%
  left_join(year_dist_long, by = c("Year", "Distance")) %>%
  select(Year, ID, Value) # 只保留需要的列
  1. 查看最终结果:
print(result)

说明

  • 这个方法比循环高效得多,逻辑清晰,新手容易上手
  • 如果实际数据里有缺失值,left_join会自动填充NA,后续可以用replace_na处理
  • 确保Distance列的类型一致(都是数值型或都是字符型),否则会匹配失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:55:33