首页 > 解决方案 > R在更改列名时通过id和子id合并两个data.frame?

问题描述

我有两个这种格式的数据框。

df1:

id x y
1  2 3
2  4 5
3  6 7
4  8 9
5  1 1

df2:

id id2 v v2 
1  t  11 21
1  b  12 22
2  t  13 23
2  b  14 24
3  t  15 25 
3  b  16 26
4  b  17 27

因此,有时,主 'df' 中的 id 有时会出现两次(最多)一次,有时根本不会出现。预期的结果是:

df_merged:

id x y v.t v2.t v.b v2.b
1  2 3 11  21   12  22
2  4 5 13  23   24  24
3  6 7 15  25   16  26
4  8 9 NA  NA   17  27
5  1 1 NA  NA   NA  NA

我使用了合并,但由于 df2 中的 id2 不匹配,我在 df_merged 中得到两个 id 实例,如下所示:

id x y v v2
1  ... 
1  ... 

提前致谢!

标签: rdataframemergeaggregate

解决方案


我们可以从调整df2到正确的格式开始,然后进行正常的加入。

librar(dplyr)
library(tidyr)

df2 %>% gather(key,val,-id,-id2) %>%   #Transfer from wide to long format for v and v2
        mutate(new_key=paste0(key,'.',id2)) %>%  #Create a new id2 as new_key
        select(-id2,-key) %>%     #de-select the unnessary columns
        spread(new_key,val) %>%   #Transfer back to wide foramt with right foramt for id
        right_join(df1) %>%       #right join df1 "To includes all rows in df1" using id
        select(id,x,y,v.t,v2.t,v.b,v2.b) #rearrange columns name
Joining, by = "id"
  id x y v.t v2.t v.b v2.b
1  1 2 3  11   21  12   22
2  2 4 5  13   23  14   24
3  3 6 7  15   25  16   26
4  4 8 9  NA   NA  17   27
5  5 1 1  NA   NA  NA   NA

推荐阅读