R 通过变量作为列名进行全_联接
我正在尝试使用dplyr的R 通过变量作为列名进行全_联接,r,dplyr,R,Dplyr,我正在尝试使用dplyr的full_join组合两个data.frames,例如: col1 = 'b' col2 = 'd' df1 = data.frame(a = 1:3, b = 1:3) df2 = data.frame(a = 1:3, d = 1:3) full_join(df1, df2, c('a' = 'a', col1 = col2)) 但它又回来了 错误:by不能包含LHS中缺少的联接列col1 我正在寻找类似的输出 merge(df1, df2, by.x =
full_join
组合两个data.frames,例如:
col1 = 'b'
col2 = 'd'
df1 = data.frame(a = 1:3, b = 1:3)
df2 = data.frame(a = 1:3, d = 1:3)
full_join(df1, df2, c('a' = 'a', col1 = col2))
但它又回来了
错误:by
不能包含LHS中缺少的联接列col1
我正在寻找类似的输出
merge(df1, df2, by.x = c('a', col1), by.y = c('a', col2))
a b
1 1 1
2 2 2
3 3 3
按如下方式更改联接:
full_join(df1, df2, by=c('b'='d'))
a.x b a.y
1 1 1 1
2 2 2 2
3 3 3 3
这会重现你的结果,这是你想要的吗
full_join(df1, df2, by="a")%>%select(-d)
您可以使用
重命名
,即
library(dplyr)
full_join(df1, rename_(df2, .dots = setNames(col2, col1)))
这就给了,
根据@akrun和@mt1022评论发布备选方案
#akrun
full_join(df1, rename_at(df2, .vars = col2, funs(paste0(col1))))
full_join(df1, rename(df2, !!(col1) := !!rlang::sym(col2)))
#mt1022
full_join(df1, rename_at(df2, col2, ~col1))
中@MrFlick的所有积分,对于
OP
的示例稍作修改:
full_join(df1, df2, by = c("a",setNames(col2, col1)))
可能与
merge()
的错误重复?我认为它改变了顺序,破坏了geom_polygon
绘图另一个选项是rename_at(df2,.vars=col2,funs(paste0(col1))
或rename(df2,!!(col1):=!!rlang::sym(col2))
@akrun(df1,在(df2,col2,~col1)处重命名_)@mt1022这很好
full_join(df1, df2, by = c("a",setNames(col2, col1)))