如何在R中对两个data.frame执行左连接并按ID排序
解决方案
先还原你的两个数据框:
# 数据框A A <- structure(list(ID = c(111L, 222L, 333L, 444L, 555L, 666L)), row.names = c(NA, 6L), class = "data.frame") # 数据框B B <- structure(list(ID = c(111L, 222L, 444L, 555L, 777L, 888L), Created.At = c("2018-10-31 06:25:20", "2019-01-19 15:42:19", "2019-01-19 15:42:50", "2020-06-30 22:04:54", "2019-01-19 15:51:48", "2019-01-19 15:51:48")), row.names = c(NA, 6L), class = "data.frame")
方法一:Base R实现
用merge()做左连接(all.x = TRUE保留A的所有行),再用order()按ID排序:
# 左连接并排序 result_base <- merge(A, B, by = "ID", all.x = TRUE) result_base <- result_base[order(result_base$ID), ] # 查看结果 print(result_base)
输出结果:
ID Created.At 1 111 2018-10-31 06:25:20 2 222 2019-01-19 15:42:19 3 333 <NA> 4 444 2019-01-19 15:42:50 5 555 2020-06-30 22:04:54 6 666 <NA>
方法二:dplyr包实现
用tidyverse风格的函数完成左连接和排序:
# 加载dplyr包 library(dplyr) # 左连接并排序 result_dplyr <- A %>% left_join(B, by = "ID") %>% arrange(ID) # 查看结果 print(result_dplyr)
输出结果与Base R方法完全一致。
内容的提问来源于stack exchange,提问作者jsaab
相关产品推荐
相关产品推荐

