gpt4 book ai didi

r - 通过列的精确匹配合并数据框

转载 作者:行者123 更新时间:2023-12-02 03:28:05 25 4
gpt4 key购买 nike

我想合并两个数据框,其中一个有更多变量(列),而另一个有更多观察结果(行)。它们的设置方式的简化示例如下:

数据框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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com