如何在dplyr的left_join中使用含year+1运算的by参数?
解决方案
在dplyr中,你不能直接在left_join()的by参数里写year+1="year"这类表达式,不过有两种简便方法实现你的需求:
方法1:创建辅助列(兼容所有dplyr版本)
先在原表中生成year+1的辅助列,再以此列关联另一表的year:
library(dplyr) joint <- storms %>% mutate(next_year = year + 1) %>% left_join(storms, by = c("name", "next_year" = "year"), suffix = c("", "_next"))
suffix参数用来区分原表和连接表的同名列,避免列名冲突。
方法2:使用join_by()(dplyr 1.1.0及以上版本支持)
如果你的dplyr版本足够新(1.1.0+),可以用join_by()直接在连接条件里写表达式,无需提前创建辅助列:
joint <- storms %>% left_join(storms, by = join_by(name == name, year + 1 == year), suffix = c("", "_next"))
这种方式更简洁,直接在连接逻辑里体现“原表year+1匹配另一表year”的规则。
内容的提问来源于stack exchange,提问作者Rgrvkfer
相关产品推荐
相关产品推荐

