首页 > 解决方案 > 根据 ID 将一个数据帧的行合并到另一个数据帧的多列

问题描述

我有一个具有 ID 号和相应数据的数据框,其中一些 ID 号在多行中重复,我想将此数据框与另一个每行有一个 ID 号的数据框合并。因此结果将是向每个行/ID 添加多个列以覆盖重复项。

我一直在使用 merge() 和 aggregate() 函数试图让它工作,但还没有接近我想要的。我还花了很多时间搜索堆栈溢出以找到解决方案,但一无所获。

这是第一个数据框的样子:

df1 <- data.frame(ID = c(90051, 90051, 90051, 90229, 90229, 91120, 91120, 89649), 
              SPP = c("ABLA", "PICO", "POTR5", "ABLA", "PICO", "ABLA", "POTR5", "ABLA"), 
              COUNT = c(5, 4, 1, 7, 1, 3, 5, 11))

这就是我要修改的数据框的样子

df2 <- data.frame(ID = c(85470, 90051, 90229, 91120, 89649, 84364), 
              COUNTY = c(49, 57, 107, 107, 117, 37), STATUS = c(1, 1, 1, 2, 1, 3))

这就是我希望我的结果数据框看起来像

df3 <- data.frame(ID = c(85470, 90051, 90229, 91120, 89649, 84364), 
              COUNTY = c(49, 57, 107, 107, 117, 37), STATUS = c(1, 1, 1, 2, 1, 3),
              ABLA = c(NA, 5, 7, 3, 11, NA), PICO = c(NA, 4, 1, NA, NA, NA), POTR5 = c(NA, 7, NA, 5, NA, NA))

标签: r

解决方案


我相信这应该这样做。通过使用 all.x = TRUE,您可以像 SQL 的左外连接一样进行合并。

merge(x = df1, y = df2, by = "ID", all.x = TRUE)

推荐阅读