首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用一列连接两列

用一列连接两列
EN

Stack Overflow用户
提问于 2020-09-08 10:03:34
回答 2查看 136关注 0票数 0

我正在寻找一个dplyr解决方案,使用一行将数据帧的两列与另一数据帧的一列连接起来。例如:

要合并的数据帧:

代码语言:javascript
复制
df <- tibble(a = 1:5,
             b = 6:10)

df2 <- tibble(c = 1:10,
              d = letters[1:10])

预期结果:

代码语言:javascript
复制
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合并

我试过:

代码语言:javascript
复制
df %>%
  left_join(df2, by = c('a' = 'c',
                        'b' = 'c'))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-08 10:07:44

以长格式获取数据,以便在一个左联接中连接多个列。

代码语言:javascript
复制
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    
票数 1
EN

Stack Overflow用户

发布于 2020-09-08 13:42:49

另一种使用left_join()的方法

代码语言:javascript
复制
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   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63791593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档