Chcę left_join
wielu ramek danych:Jak połączyć wiele ramek danych za pomocą dplyr?
dfs <- list(
df1 = data.frame(a = 1:3, b = c("a", "b", "c")),
df2 = data.frame(c = 4:6, b = c("a", "c", "d")),
df3 = data.frame(d = 7:9, b = c("b", "c", "e"))
)
Reduce(left_join, dfs)
# a b c d
# 1 1 a 4 NA
# 2 2 b NA 7
# 3 3 c 5 8
To działa, ponieważ wszystkie one mają taką samą b
kolumnę, ale Reduce
nie pozwala mi określić dodatkowe argumenty, które można przekazać do left_join
. Czy istnieje coś takiego do wykonania?
dfs <- list(
df1 = data.frame(a = 1:3, b = c("a", "b", "c")),
df2 = data.frame(c = 4:6, d = c("a", "c", "d")),
df3 = data.frame(d = 7:9, b = c("b", "c", "e"))
)
Aktualizacja
Ten rodzaj prac: Reduce(function(...) left_join(..., by = c("b" = "d")), dfs)
by
ale gdy jest więcej niż jeden element, to daje ten błąd: Error: cannot join on columns 'b' x 'd': index out of bounds
Czy nie robisz 'Reduce (function (...) (..., left_join inne argumenty tutaj), DFS)' ? –
Nie pomyślałem o tym. Tak, mogę! Zapraszam do napisania go jako odpowiedź – nachocab
Hmm, faktycznie, to się zepsuje, jeśli 'by' ma więcej niż jeden element. Zobacz aktualizację – nachocab