Я хочу left_join
несколько кадров данных:
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
Это работает, потому что все они имеют одинаковый столбец b
, но Reduce
не позволяет мне указать дополнительные аргументы, которые я могу передать на left_join
. Есть ли что-то вроде этого?
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"))
)
Обновление
Этот вид работ: Reduce(function(...) left_join(..., by = c("b" = "d")), dfs)
, но когда by
является более чем одним элементом, он дает эту ошибку: Error: cannot join on columns 'b' x 'd': index out of bounds