多变量上的fuzzy_full_join在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,-

我对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,-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