如何基于年份将df1的Value.1匹配至df2对应年份?
解决方案
方法一:用left_join(推荐,适配大数据集)
这是处理按列匹配合并的标准方式,比case_when更简洁高效,尤其适合大规模数据集,完全不用手动操作。
library(dplyr) df1 <- data.frame(Year = c(2000:2002), Value.1 = c(0:2)) df2 <- data.frame(Year = c(2000,2000,2000,2001,2001,2001,2002,2002,2002), Value.2 = c(1:9)) # 按Year列匹配合并 result_df <- df2 %>% left_join(df1, by = "Year") print(result_df)
运行后输出:
Year Value.2 Value.1 1 2000 1 0 2 2000 2 0 3 2000 3 0 4 2001 4 1 5 2001 5 1 6 2001 6 1 7 2002 7 2 8 2002 8 2 9 2002 9 2
方法二:用mutate + case_when(符合你的推测方向)
如果一定要用这个组合实现,需要逐个年份写判断逻辑,适合年份少的场景:
library(dplyr) result_df <- df2 %>% mutate(Value.1 = case_when( Year == 2000 ~ df1$Value.1[df1$Year == 2000], Year == 2001 ~ df1$Value.1[df1$Year == 2001], Year == 2002 ~ df1$Value.1[df1$Year == 2002], TRUE ~ NA_real_ # 处理未匹配到的年份 )) print(result_df)
补充说明
left_join会自动批量匹配对应年份的Value.1,不用手动写每个年份的判断,大数据集下性能和可维护性都更好。case_when的方式需要逐个年份定义规则,年份多的时候代码会很冗长,不推荐大规模数据集使用。
内容的提问来源于stack exchange,提问作者nope0540
相关产品推荐
相关产品推荐

