У меня возникли проблемы с соединением фреймов данных с помощью dplyr, где я хотел бы игнорировать NA.
Данные, которые у меня есть, довольно большие, но упрощенная версия выглядит следующим образом:
id <- c("id1", "id2", "id3", "id4")
A <- c("E", "F", "G", NA)
B <- c("T", NA, "N", "T")
C <- c(NA, "T", "U", NA)
df <- data.frame(A, B, C)
id A B C
1 id1 E T NA
2 id2 F NA T
3 id3 G N U
4 id4 NA T NA
У меня есть запись, которую я хотел бы сопоставить с df, например:
df2 <- data.frame(A = "E", B = "T", C = "M")
A B C
1 E T M
В результате я хотел бы получить все строки из df, которые соответствуют df2, ноНС следует игнорировать.Таким образом, результат должен выглядеть следующим образом:
id A B C
1 id1 E T NA
2 id4 NA T NA
Я пытался сделать это с помощью semi_join, но пока это не сработало:
result <- df %>%
group_by(n = seq(n())) %>%
do(modify_if(., is.na, ~NULL) %>%
semi_join(df2, by = c("A", "B", "C"))) %>%
ungroup %>%
select(-n)
Что приводит к:
Error: `by` can't contain join column `C` which is missing from LHS
Call `rlang::last_error()` to see a backtrace
Кто знает ответ?