【问题标题】:Concatanate two columns with different vector sizes in R [duplicate]在R中连接具有不同向量大小的两列[重复]
【发布时间】:2020-11-23 06:43:56
【问题描述】:

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

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 以获得上述格式的结果?谢谢。

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    要合并两列,您可以使用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]>
    

    【讨论】:

    • 谢谢。我也可以为多个列执行此操作吗?如果我有 4 列要连接,我可以运行一个 map2 函数来连接所有向量吗?
    • 超过 2 列使用 pmap : data_frame %&gt;% mutate(new_col = pmap(list(a, b), c))。您应该在list(..) 中包含要连接的列。
    猜你喜欢
    • 1970-01-01
    • 2017-11-18
    • 2021-12-06
    • 2019-02-22
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多