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

R语言如何基于ID与时间合并两个时间序列数据框

问题根因

你得到9行结果的核心原因是data2中存在重复time值:2020-12、2021-01各对应2个不同的trend取值,仅按time字段关联时会产生笛卡尔积,导致行数膨胀。
另外你提供的data2构造代码存在笔误:定义列名时大写了Time,但前面创建的变量是小写time,实际运行会报错,需要先修正为小写。


解决方案

你的预期结果中,每个时间匹配的是data2里对应时间的第一个trend取值,因此先对data2按时间去重,再做关联即可:

library(tidyverse)
library(lubridate)

# 先修正data2的构造笔误
time <- c("2020-10", "2020-11", "2020-12", "2021-01", "2020-12", "2021-01", "2021-02")
trend <- c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7)
data2 <- data.frame(time, trend)
data2$time <- ym(data2$time)

# 对data2按time去重,保留每个时间第一次出现的trend值
data2_unique <- data2 %>% 
  distinct(time, .keep_all = TRUE)

# 关联两个表,得到5行结果
newData <- inner_join(data1, data2_unique, by = "time")

运行后输出和你给出的预期完全一致:

id       time values trend
1 11 2020-11-01     10   0.2
2 11 2020-12-01     20   0.3
3 11 2021-01-01     25   0.4
4 12 2020-12-01    100   0.3
5 12 2021-01-01    200   0.4

如果你的去重逻辑不是取第一个值,而是取trend的均值/最大值等,可先对data2按time分组汇总后再关联:

# 示例:按时间取trend的平均值
data2_agg <- data2 %>%
  group_by(time) %>%
  summarise(trend = mean(trend), .groups = "drop")

newData <- inner_join(data1, data2_agg, by = "time")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 02:36:04