将两列与一列连接

问题描述

我正在寻找一种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一次将abc合并?

我尝试过:

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   

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...