簡體   English   中英

full_join由變量作為列名

[英]full_join by variable as column names

我正在嘗試使用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 = c('a', col1), by.y = c('a', col2))
  a b
1 1 1
2 2 2
3 3 3

你可以使用rename_ ,即

library(dplyr)

full_join(df1, rename_(df2, .dots = setNames(col2, col1)))

這使,

 #Joining, by = c("a", "b") ab 1 1 1 2 2 2 3 3 3 

根據@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))

像這樣更改連接:

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

重復鏈接中對@MrFlick的所有信用,稍微修改了OP的示例:

full_join(df1, df2, by = c("a",setNames(col2, col1)))

這會重現你的結果,這是你想要的嗎?

full_join(df1, df2, by="a")%>%select(-d)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM