Мы можем использовать цикл for
, когда столбцы by
различны на каждом шаге
grp <- c("CustomerNum", "TripID")
out <- customer
for(i in seq_along(grp)) {
out <- inner_join(out, tables[[i+1]], by = grp[i])
}
out
# CustomerNum val TripID newInfo
#1 1 -0.5458808 4 *
#2 2 0.5365853 2 ****
, а затем select
интересующие столбцы
Обратите внимание, чтоесли мы не предоставим by
, он автоматически выберет by
в зависимости от наличия общего имени столбца на основе воспроизводимого примера ниже.Поскольку ФП не привел ни одного воспроизводимого примера, остается неясным ситуация
reduce(tables, inner_join)
#Joining, by = "CustomerNum" #### <-----
#Joining, by = "TripID" #### <-----
# CustomerNum val TripID newInfo
#1 1 -0.5458808 4 *
#2 2 0.5365853 2 ****
data
set.seed(24)
customer <- data.frame(CustomerNum = 1:5, val = rnorm(5))
reservation <- data.frame(CustomerNum = 1:3, TripID = c(4, 2, 8))
trip <- data.frame(TripID = c(4, 9, 2), newInfo = c("*", "**", "****"))
tables <- list(customer, reservation, trip)