Я использую recordlinkeage для поиска дубликатов. Я использую несколько разных поисков для идентификации пар. Я хотел бы объединить свои наборы пар, чтобы удалить дубликаты между двумя методами. Я хотел бы иметь все уникальные пары, которые находятся либо в getPairs(y), либо в getPairs(z). В качестве конечного продукта мне нужен data.frame со всеми уникальными комбинациями.

library(RecordLinkage) 

# Making some synthetic data
x <- rbind( mtcars , mtcars[2,])
x$name <- rownames( x )
x$nrid <- sample( 1:1000000 , nrow( x))

y = compare.dedup(
    x,
    blockfld=c("gear", "carb", "am", "name") ,
    phonetic = "name" ,
    phonfun = soundex) 

z = compare.dedup(
    x,
    blockfld=c( "am", "name") ,
    phonetic = "name" ,
    phonfun = soundex) 

# I know that I can see the details of my pairs
summary(y)
y <- getPairs(y)
z <- getPairs(z)
4
greg5678 14 Ноя 2019 в 03:14

1 ответ

Я думаю, что это может быть просто вопрос использования dplyr::full_join:

library(RecordLinkage) 
x <- rbind(mtcars , mtcars[2, ])
x$name <- rownames(x)
x$nrid <- sample(1:1000000, nrow(x))
y = compare.dedup(
  x, blockfld = c("gear", "carb", "am", "name") ,
  phonetic = "name", phonfun = soundex
) 
z = compare.dedup(
  x, blockfld = c("am", "name"),
  phonetic = "name", phonfun = soundex
) 

## Check the list components of y, z: safe to merge
all(names(y$pairs) == names(z$pairs))
all(y$frequencies == z$frequencies)

## Remove duplicates while combining pairs from both: key line
z$data <- dplyr::full_join(y$data, z$data)
getPairs(z)

Если нужно объединить несколько вещей, вы можете использовать Reduce для списка. Дайте мне знать, если это не то, к чему вы стремились.

1
Kim 14 Ноя 2019 в 07:12