fuzzy_full_join над несколькими переменными дублирует столбцы в R - PullRequest
0 голосов
/ 11 февраля 2020

Я делаю fuzzy_full_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,-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)

1 Ответ

1 голос
/ 11 февраля 2020

Мы можем использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...