複数のデータフレームを_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
_
遅すぎるわね。今日は未回答の質問セクションを紹介しました。気になってすみません。
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
_
これでうまくいきますか?
jnd.tbl <- df1 %>%
left_join(df2, by='b') %>%
left_join(df3, by='d')