在R中合并两个具有不同向量大小的列

时间:2020-08-03 07:28:57

标签: r dplyr tidyverse

我有一个包含两列的数据框a和b,它们要么包含单个字符值,要么包含特定行中值的向量。我想合并两列,以便可以在单个向量中合并两列的值。但是,当我使用粘贴功能时,我无法在单个向量中汇总每一行中的值。 以下是此问题的可重现示例:

library(tibble)
library(tidyverse)
data_frame <-
  tribble(
    ~a,              ~b,
    50,              3,
    17,              50,
    c("21", "19"),   50,
    c("1", "10"),    c("50", "51")
  )

data_frame %>% 
  mutate(new_column = paste(a, b))
#> # A tibble: 4 x 3
#>   a         b         new_column                          
#>   <list>    <list>    <chr>                               
#> 1 <dbl [1]> <dbl [1]> "50 3"                              
#> 2 <dbl [1]> <dbl [1]> "17 50"                             
#> 3 <chr [2]> <dbl [1]> "c(\"21\", \"19\") 50"              
#> 4 <chr [2]> <chr [2]> "c(\"1\", \"10\") c(\"50\", \"51\")"

new_column列中,我希望结果如下:

c("50" "3")
c("17" "50")
c("21" "19" "50")
c("1" "10" "50" "51") 

有没有一种方法可以组合列a和b来获得上述格式的结果?谢谢。

1 个答案:

答案 0 :(得分:0)

要合并两列,可以使用c。在基数R中,您可以使用Map进行此操作:

data_frame$new_col <- Map(c, data_frame$a, data_frame$b)

或者在tidyverse中使用map2

library(dplyr)
library(purrr)

data_frame %>% mutate(new_col = map2(a, b, c))

# A tibble: 4 x 3
#  a         b         new_col  
#  <list>    <list>    <list>   
#1 <dbl [1]> <dbl [1]> <dbl [2]>
#2 <dbl [1]> <dbl [1]> <dbl [2]>
#3 <chr [2]> <dbl [1]> <chr [3]>
#4 <chr [2]> <chr [2]> <chr [4]>