问题描述
我正在寻找一种dplyr解决方案,以使用一行将一个数据帧的两列与另一数据帧的一列连接起来。例如:
要合并的数据帧:
df <- tibble(a = 1:5,b = 6:10)
df2 <- tibble(c = 1:10,d = letters[1:10])
所需结果:
df3 <- df %>%
left_join(df2,by = c('a' = 'c')) %>%
rename(d_a = d) %>%
left_join(df2,by = c('b' = 'c')) %>%
rename(d_b = d)
a b d_a d_b
<int> <int> <chr> <chr>
1 1 6 a f
2 2 7 b g
3 3 8 c h
4 4 9 d i
5 5 10 e j
如何使用left-join
一次将a
和b
与c
合并?
我尝试过:
df %>%
left_join(df2,by = c('a' = 'c','b' = 'c'))
解决方法
以长格式获取数据,以便您可以在一个左连接中连接多列
library(dplyr)
library(tidyr)
df %>%
mutate(row = row_number()) %>%
pivot_longer(cols = -row) %>%
left_join(df2,by = c('value' = 'c')) %>%
pivot_wider(names_from = name,values_from = c(value,d)) %>%
select(-row)
# value_a value_b d_a d_b
# <int> <int> <chr> <chr>
#1 1 6 a f
#2 2 7 b g
#3 3 8 c h
#4 4 9 d i
#5 5 10 e j
,
您可以尝试使用left_join()
library(dplyr)
df3 <- df %>%
left_join(df2,by = c("a" = "c")) %>%
left_join(df2,by = c("b" = "c"),suffix = c("_a","_b"))
# a b d_a d_b
# <int> <int> <chr> <chr>
# 1 1 6 a f
# 2 2 7 b g
# 3 3 8 c h
# 4 4 9 d i
# 5 5 10 e j