R语言如何按日期和国家双条件合并DataFrame获取对应收益率
解决方案
核心逻辑:你当前的DF2是宽表结构,需要先把它转换为长表结构,之后就可以通过日期、国家两个字段和DF1直接匹配,就能拿到对应国家对应日期的收益率。
方法1:tidyverse方案(推荐,可读性和扩展性更强)
library(dplyr) library(tidyr) # 第一步:把DF2(market表)从宽表转成长表,国家列名转为Country字段,收益率转为Return字段 market_long <- market %>% pivot_longer(cols = c(US, CA), names_to = "Country", values_to = "Return") # 第二步:按日期、国家两个字段匹配合并 result <- stocks %>% left_join(market_long, by = c("date", "Country"))
如果后续要新增其他国家的收益率,只需要在pivot_longer的cols参数里添加对应国家代码即可,不需要修改其他逻辑。
方法2:base R方案(无需额外加载依赖包)
# 先匹配到DF1每行日期对应DF2的行位置 market_row_idx <- match(stocks$date, market$date) # 按国家取值填充Return列 stocks$Return <- ifelse( stocks$Country == "US", market$US[market_row_idx], market$CA[market_row_idx] )
内容的提问来源于stack exchange,提问作者thomas.diridondo
相关产品推荐
相关产品推荐

