r - 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 ...
提前致谢!
解决方案
我们可以从调整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
推荐阅读
- reactjs - 在 WebStorm 中,如何在 React 中禁用道具缩进?
- r - 如何从字符串列中提取数字并确定它们是否小于阈值?
- arrays - C程序中的下标值既不是数组也不是指针也不是向量
- google-apps-script - 清除 g-sheet 内容永远不会完成
- javascript - 当父 THREE.js 组的可见性改变时改变 CSS2D 对象的可见性
- javascript - 如何获取选中复选框的列表?
- wordpress - 标志没有变化
- vb.net - 如何添加加减号(ALT 241 或 Alt 0177)?在 vb.net label.text 中
- ivy - 如何将 AWS CodeArtifact 与 Apache Ivy 结合使用?
- swift - 如何通过 Alamofire 5 以上的参数对象上传带有文件的 Multipart Form Data?