如何使用dplyr加入多个数据帧? [英] How to join multiple data frames using dplyr?
问题描述
我想要 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
列,但减少
不允许我指定我可以传递给 left_join
。有这样的事情吗?
This works because they all have the same b
column, but Reduce
doesn't let me specify additional arguments that I can pass to left_join
. Is there a work around for something like this?
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)
c $ c> by 是一个以上的元素给出了这个错误:错误:不能加入列'b'x'd':索引出边界
This kind of works: Reduce(function(...) left_join(..., by = c("b" = "d")), dfs)
but when by
is more than one element it gives this error: Error: cannot join on columns 'b' x 'd': index out of bounds
推荐答案
现在已经太晚了...今天我介绍了未回答的问题部分。很抱歉打扰
It's been too late i know....today I got introduced to the unanswered questions section. Sorry to bother.
使用 left_join()
dfs <- list(
df1 = data.frame(b = c("a", "b", "c"), a = 1:3),
df2 = data.frame(d = c("a", "c", "d"), c = 4:6),
df3 = data.frame(b = c("b", "c", "e"), d = 7:9)
)
func <- function(...){
df1 = list(...)[[1]]
df2 = list(...)[[2]]
col1 = colnames(df1)[1]
col2 = colnames(df2)[1]
xxx = left_join(..., by = setNames(col2,col1))
return(xxx)
}
Reduce( func, dfs)
# b a c d
#1 a 1 4 NA
#2 b 2 NA 7
#3 c 3 5 8
使用 merge()
:
func <- function(...){
df1 = list(...)[[1]]
df2 = list(...)[[2]]
col1 = colnames(df1)[1]
col2 = colnames(df2)[1]
xxx=merge(..., by.x = col1, by.y = col2, , all.x = T)
return(xxx)
}
Reduce( func, dfs)
# b a c d
#1 a 1 4 NA
#2 b 2 NA 7
#3 c 3 5 8
这篇关于如何使用dplyr加入多个数据帧?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!