更新重复行的值,R

时间:2021-06-09 14:03:28

标签: r dataframe

我有两个数据框,它们共享许多列,但不是全部。通常,我想合并这两个数据帧。虽然这有一点点扭曲...... 两个数据框都有一个 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!

2 个答案:

答案 0 :(得分:0)

使用基本的 R 函数:

  1. 合并表格: df <- merge(x = dfB, y = dfA, by.x = "ID", by.y = "ID", , all.x = T, , all.y = T)

  2. 删除不需要的列:df[c("status.x","data.x")] <- NULL(调整列名)

  3. 对列重新排序(如果需要):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      
相关问题