У меня есть два dataframes следующим образом,Сравнение двух data.frames с различными столбцами, чтобы найти строки в data.frame 1 отсутствует в других
a1 <- data.frame(a = 1:5, b=letters[1:5], c = 1:5)
a2 <- data.frame(a = 1:3, b=letters[1:3], d = 1:3)
Я хочу, чтобы найти строки a1 нет в a2 с только для первых двух столбцов (a, b). Мой идеальный выход должен быть,
a b c match
1 1 a 1 yes
2 2 b 2 yes
3 3 c 3 yes
4 4 d 4 no
5 5 e 5 no
Я попытался следующие,
output <- sqldf('SELECT * FROM a1 EXCEPT SELECT * FROM a2')
, но это работает только тогда, когда есть равные колонки на обоих dataframes, а также имена одинаковы. Но я хочу найти только для совпадений в столбцах (a, b) и дать результат в a1 с да/нет.
Может ли кто-нибудь помочь мне найти это?
@akun спасибо за это. У меня есть одно сомнение здесь. Если имена столбцов a2 (a, b) похожи на (q, w), мы можем дать следующее: c («нет», «да») [(! Is.na (слияние (a1, a2, by = c ("a" = "q", "b" = "w"), all.x = TRUE) $ d)) + 1L] – haimen
@haimen В 'left_join', вы можете сделать этот синтаксис, но в 'merge', это будет' by.x' и 'by.y' – akrun