多变量上的fuzzy_full_join在R中复制列
我对R中的两个表进行模糊全联接,需要多个键来匹配。一些 行不匹配。输出复制了这些键。这种情况不会发生 具有非模糊完全联接。删除重复项的最佳方法是什么?我 我们有一个解决方案,但它似乎很麻烦 例如:多变量上的fuzzy_full_join在R中复制列,r,join,R,Join,我对R中的两个表进行模糊全联接,需要多个键来匹配。一些 行不匹配。输出复制了这些键。这种情况不会发生 具有非模糊完全联接。删除重复项的最佳方法是什么?我 我们有一个解决方案,但它似乎很麻烦 例如: x<-data.frame("id"=c(1,1,2,2), "time" = c(1,2,1,2), "meas1" = c(1,2,3,4)) y<-data.frame("id"=c(1,1,2,2), "time" =c(1,3,2,4),"meas2"=c(-1,-2,-3,-
x<-data.frame("id"=c(1,1,2,2), "time" = c(1,2,1,2), "meas1" = c(1,2,3,4))
y<-data.frame("id"=c(1,1,2,2), "time" =c(1,3,2,4),"meas2"=c(-1,-2,-3,-4))
# compare full_join output with fuzzy_full_join
full_join(x,y,by=c('id'='id','time'='time'))
fuzzy_full_join(x,y,by=c('id'='id','time'='time'),match_fun=list(`==`,`==`))
# make fuzzy_full_join output match full_join output
fuzzy_full_join(x,y,by=c('id'='id','time'='time'),match_fun=list(`==`,`==`)) %>%
mutate(id=if_else(is.na(id.x),id.y,id.x)) %>%
select(-id.x,-id.y) %>%
mutate(time=if_else(is.na(time.x),time.y,time.x)) %>%
select(-time.y,-time.x)
我们可以使用coalesce,这可能有助于减少代码
library(dplyr)
library(fuzzyjoin)
fuzzy_full_join(x,y,by=c('id'='id','time'='time'),match_fun=list(`==`,`==`)) %>%
mutate(id=coalesce(id.x, id.y), time = coalesce(time.x, time.y)) %>%
select(-matches('\\.x$|\\.y$'))
# meas1 meas2 id time
#1 1 -1 1 1
#2 4 -3 2 2
#3 2 NA 1 2
#4 3 NA 2 1
#5 NA -2 1 3
#6 NA -4 2 4