如何在R中实现类似Stata的1:1键值匹配合并?
1:1匹配合并数据表的解决方案
普通join方法会对匹配行做笛卡尔积,没法直接实现你要的组内顺序1:1匹配。要达成预期结果,得先给每个Symbol+Quant分组里的行添加组内序号,再基于序号做合并:
实现代码
library(dplyr) # 给两个数据表分别添加组内行号 df1_with_idx <- df1 %>% group_by(Symbol, Quant) %>% mutate(match_idx = row_number()) %>% ungroup() df2_with_idx <- df2 %>% group_by(Symbol, Quant) %>% mutate(match_idx = row_number()) %>% ungroup() # 按Symbol、Quant和组内行号做内连接,再移除临时序号列 final_result <- inner_join(df1_with_idx, df2_with_idx, by = c("Symbol", "Quant", "match_idx")) %>% select(-match_idx) # 输出结果 print(final_result)
运行结果
Symbol Quant ID1 ID2 1 A 10 1 4 2 A 10 2 6 3 B 10 3 5
这样就能实现每个分组内df1的第n行对应df2的第n行,完全符合你的预期输出。
内容的提问来源于stack exchange,提问作者Azamat Sadikov
相关产品推荐
相关产品推荐

