Мое первое решение здесь состояло в том, чтобы удалить те строки из файла file1 и file2, где USERID пуст.
Это не идеальное решение (учитывая, что merge
, вероятно, более дружественно к DT, чем соединение функционирует в dplyr
) в соответствии с комментарием, сделанным @ r2evans.
Так что более эффективным решением, вероятно, была бы замена full_join слиянием, например,
merge (file1, file2, by = "USERID", все = TRUE) [is.na (PROFILE.ID.x) | is.na (PROFILE.ID.y) | PROFILE.ID.x! = PROFILE.ID.y,]
Но первое решение, которое я попытался исправить проблему, заключалось в добавлении строк file1 <- filter(file1, USERID != "")
и file2 <- filter(file2, USERID != "")
в код.
В итоге код выглядел так:
library(tidyverse, data.table)
con1 <- file("file1.csv", open = "r")
con2 <- file("file2.csv", open = "r")
file1 <- select(read.csv(con1, sep = "|", fill = F, colClasses = "character"),
PROFILE.ID, USERID)
file1 <- filter(file1, USERID != "")
setDT(file1)
file2 <- select(read.csv(con2, sep = "|", fill = F, colClasses = "character"),
PROFILE.ID, USERID)
file2 <- filter(file2, USERID != "")
setDT(file2)
full_join(file1, file2, by = "USERID") %>%
filter(is.na(PROFILE.ID.x) | is.na(PROFILE.ID.y) |
PROFILE.ID.x != PROFILE.ID.y)
close(con1)
close(con2)