我想合并两个数据框,其中一个有更多变量(列),而另一个有更多观察结果(行)。它们的设置方式的简化示例如下:
数据框1:
ID Date Indicator
12345 01/01/2008 1
54321 12/01/2008 1
数据框2:
ID Date
12345 01/01/2008
12345 01/31/2008
12345 02/28/2009
24681 01/01/2008
54321 12/01/2008
54321 12/20/2008
我想做的只是保留 ID 完全匹配的行。例如,我想要以下输出:
新数据框:
ID Date Indicator
12345 01/01/2008 1
12345 01/31/2008 NA
12345 02/28/2009 NA
54321 12/01/2008 1
54321 12/20/2008 NA
我已经尝试过
new <- merge(df1, df2, all=TRUE)
但这会导致所有行的合并,而我只想要 df2 中具有在 df1 中看到的 ID 的行。
感谢任何帮助!
最佳答案
您可以尝试使用 dplyr
解决方案:
library(dplyr)
# a right join when you filter Dataframe2 by ID in Dataframe1
Dataframe1 %>% right_join(Dataframe2[Dataframe2$ID %in% Dataframe1$ID,])
Joining, by = c("ID", "Date")
ID Date Indicator
1 12345 01/01/2008 1
2 12345 01/31/2008 NA
3 12345 02/28/2009 NA
4 54321 12/01/2008 1
5 54321 12/20/2008 NA
# clearly you can put it in a data.frame
Dataframe3 <- Dataframe1 %>% right_join(Dataframe2[Dataframe2$ID %in% Dataframe1$ID,], by = 'ID') %>%
data.frame()
因此,您不会有 ID
24681,并且在 Indicator
中您将看到 NA,这似乎是必要的,即当 Date
确实如此时不想要它。
您的数据:
Dataframe1 <- read.table(text="ID Date Indicator
12345 01/01/2008 1
54321 12/01/2008 1", stringsAsFactors = F, header = T)
Dataframe2 <- read.table(text="ID Date
12345 01/01/2008
12345 01/31/2008
12345 02/28/2009
24681 01/01/2008
54321 12/01/2008
54321 12/20/2008",stringsAsFactors = F, header = T)
关于r - 通过列的精确匹配合并数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52635089/