Я написал пакет safejoin , который решает это очень кратко.
# devtools::install_github("moodymudskipper/safejoin")
library(safejoin)
eat(DF1, DF2, .by = c(A = "D"), .prefix = "A")
# A B C A_E A_F
# 1 3 axe aa dd run
# 2 6 base bb ss gun
# 3 9 lol cc vv fun
Чтобы получить точно ожидаемый результат, мы можем использовать любую функцию переименования в .prefix
аргумент:
eat(DF1, DF2, .by = c(A = "D"), .prefix = ~paste0("A.",.))
# A B C A.E A.F
# 1 3 axe aa dd run
# 2 6 base bb ss gun
# 3 9 lol cc vv fun
eat
по умолчанию является расширенным левым соединением, аргумент prefix
был разработан специально для удовлетворения таких потребностей, как ваша.