我想根据第二个表中的匹配条件合并两个表。但是,对于不匹配的字段,我想复制第一个表中的记录。
我正在使用dplyr,并尝试了full_join,但这只是将两个表组合在一起,不会复制不匹配的行。
表1
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
K6 SL EY Val.2
Aero Asia Asia 15
Aero Asia US 20表3,即表1和表2的组合(具有来自表1的副本,其中EY不匹配):
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中Aero、Asia、US的K6、Asia、US组合,但不在表1中,因此我想复制表1中的值,但将EY设置为US
发布于 2019-01-13 04:31:23
为了复制表1中不存在的EY值的表,我建议只在列K6和SL上连接到表2,而不是在列EY上。
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。
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 0https://stackoverflow.com/questions/54163253
复制相似问题