首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并两个表,并将组合从第一个相乘到第二个

合并两个表,并将组合从第一个相乘到第二个
EN

Stack Overflow用户
提问于 2019-01-13 03:46:08
回答 1查看 48关注 0票数 0

我想根据第二个表中的匹配条件合并两个表。但是,对于不匹配的字段,我想复制第一个表中的记录。

我正在使用dplyr,并尝试了full_join,但这只是将两个表组合在一起,不会复制不匹配的行。

表1

代码语言:javascript
复制
K6  K7  SL  EY  Val.1
Aero    Gen Asia    Asia    1
Aero    Arp Asia    Asia    2
Aero    Pro Asia    Asia    8
Aero    Lgt Asia    Asia    6

表2

代码语言:javascript
复制
K6  SL  EY  Val.2
Aero    Asia    Asia    15
Aero    Asia    US  20

表3,即表1和表2的组合(具有来自表1的副本,其中EY不匹配):

代码语言:javascript
复制
K6  K7  SL  EY  Val.1   Val.2
Aero    Gen Asia    Asia    1   15
Aero    Arp Asia    Asia    2   15
Aero    Pro Asia    Asia    8   15
Aero    Lgt Asia    Asia    6   15
Aero    Gen Asia    US  0   20
Aero    Arp Asia    US  0   20
Aero    Pro Asia    US  0   20
Aero    Lgt Asia    US  0   20

表2中AeroAsiaUSK6AsiaUS组合,但不在表1中,因此我想复制表1中的值,但将EY设置为US

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-13 04:31:23

为了复制表1中不存在的EY值的表,我建议只在列K6SL上连接到表2,而不是在列EY上。

代码语言:javascript
复制
table_1 <- data.frame(K6=rep("Aero",4), K7=c("Gen","Arp","Pro","Lgt"), SL=rep("Asia",4), EY=rep("Asia",4), Val.1=c(1,2,8,6), stringsAsFactors = FALSE)
table_2 <- data.frame(K6=rep("Aero",2), SL=rep("Asia",2), EY=c("Asia","US"), Val.2=c(15,20), stringsAsFactors = FALSE)

library(dplyr)
table_3 <- left_join(table_2, table_1, by=c("K6","SL"))

    K6   SL EY.x Val.2  K7 EY.y Val.1
1 Aero Asia Asia    15 Gen Asia     1
2 Aero Asia Asia    15 Arp Asia     2
3 Aero Asia Asia    15 Pro Asia     8
4 Aero Asia Asia    15 Lgt Asia     6
5 Aero Asia   US    20 Gen Asia     1
6 Aero Asia   US    20 Arp Asia     2
7 Aero Asia   US    20 Pro Asia     8
8 Aero Asia   US    20 Lgt Asia     6

然后,对于EY.x not与EY.y不匹配的所有行,将Val.1设置为0。

代码语言:javascript
复制
table_3 <- table_3 %>%
  mutate(Val.1 = ifelse(EY.x==EY.y, Val.1, 0)) %>%
  select(-EY.y, EY=EY.x)

    K6   SL   EY Val.2  K7 Val.1
1 Aero Asia Asia    15 Gen     1
2 Aero Asia Asia    15 Arp     2
3 Aero Asia Asia    15 Pro     8
4 Aero Asia Asia    15 Lgt     6
5 Aero Asia   US    20 Gen     0
6 Aero Asia   US    20 Arp     0
7 Aero Asia   US    20 Pro     0
8 Aero Asia   US    20 Lgt     0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54163253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档