我有两个数据框,它们共享许多列,但不是全部。通常,我想合并这两个数据帧。虽然这有一点点扭曲...... 两个数据框都有一个 ID 列。一些 ID 在两个数据帧中。在数据帧 A 中,某个 ID 的状态可能是“待定”,而在数据帧 B 中,它可能是“关闭”。一般来说,B 是更新的数据帧,所以我想合并两个数据帧,但只保留数据帧 B 的状态。
数据框可能看起来像这样。
Dataframe A
ID status date someColumnA
1 'open' 01.01.2020 A
2 'closed' 01.01.2020 B
3 'pending' 01.01.2020 C
Dataframe B
ID status date someColumnB
1 'closed' 01.01.2020 rr
2 'closed' 01.01.2020 tt
4 'pending' 01.01.2020 zz
最后我想收到这样的数据帧
ID status date someColumnA someColumnB
1 'closed' 01.01.2020 A rr
2 'closed' 01.01.2020 B tt
3 'pending' 01.01.2020 C -
4 'pending' 01.01.2020 - zz
Thanks for the help!
答案 0 :(得分:0)
使用基本的 R 函数:
合并表格:
df <- merge(x = dfB, y = dfA, by.x = "ID", by.y = "ID", , all.x = T, , all.y = T)
删除不需要的列:df[c("status.x","data.x")] <- NULL
(调整列名)
对列重新排序(如果需要):df <- df[,c(5, 4, 1, 2, 3)]
(或任何顺序,只需调整向量中的索引)
答案 1 :(得分:0)
这行得通吗:
library(dplyr)
df1$status[match(df2$ID,df1$ID, nomatch = 0)] <- df2$status[match(df1$ID,df2$ID,nomatch = 0)]
df1
# A tibble: 3 x 4
ID status date someColumnA
<dbl> <chr> <chr> <chr>
1 1 'closed' 01.01.2020 A
2 2 'closed' 01.01.2020 B
3 3 'pending' 01.01.2020 C
df1 %>% full_join(df2)
Joining, by = c("ID", "status", "date")
# A tibble: 4 x 5
ID status date someColumnA someColumnB
<dbl> <chr> <chr> <chr> <chr>
1 1 'closed' 01.01.2020 A rr
2 2 'closed' 01.01.2020 B tt
3 3 'pending' 01.01.2020 C NA
4 4 'pending' 01.01.2020 NA zz
使用的数据:
df1
# A tibble: 3 x 4
ID status date someColumnA
<dbl> <chr> <chr> <chr>
1 1 'closed' 01.01.2020 A
2 2 'closed' 01.01.2020 B
3 3 'pending' 01.01.2020 C
df2
# A tibble: 3 x 4
ID status date someColumnB
<dbl> <chr> <chr> <chr>
1 1 'closed' 01.01.2020 rr
2 2 'closed' 01.01.2020 tt
3 4 'pending' 01.01.2020 zz