【问题标题】:Concatenating 2 Dataframes in R在 R 中连接 2 个数据帧
【发布时间】:2019-10-23 15:45:51
【问题描述】:

假设我有两个具有相同维度和列名的数据框:

library(tidyverse)

x <- tribble(
  ~x, ~y, ~z,
  1,2,3,
  2,3,4,
  3,4,5
)

y <- tribble(
  ~x, ~y, ~z,
  "a","b","c",
  "b","c","d",
  "c","d","e"
)

我怎样才能将它们组合起来创建这个:

   # A tibble: 3 x 3
  x     y     z    
  <chr> <chr> <chr>
1 1a    2b    3c   
2 2b    3c    4d   
3 3c    4d    5e 

我最初的想法是做这样的事情,但它不起作用:

paste0(x, y)

【问题讨论】:

    标签: r concatenation


    【解决方案1】:

    使用 purrr 中的 map2:

    library(purrr)
    
    map2_dfr(x, y, paste0)
    

    给予:

    # A tibble: 3 x 3
      x     y     z    
      <chr> <chr> <chr>
    1 1a    2b    3c   
    2 2b    3c    4d   
    3 3c    4d    5e   
    

    这可以在没有任何包的情况下以几乎相同的方式完成:

    as.data.frame(mapply(paste0, x, y), stringsAsFactors = FALSE)
    

    在 R 开发中,这可以写成:

    list2DF(mapply(paste0, x, y))
    

    【讨论】:

    • 哦,效果很好!但是,如果我想通过在每个单元格内的值之间添加分隔符来扩展它怎么办?这不是原始问题的一部分,但我很想知道如何对此进行扩展。
    • map2_dfr(x, y, ~ paste0(.x, "-", .y))
    • 使用@G.Grothendiecks 答案,在基础:as.data.frame(mapply(paste, x, y, sep = "_"), stringsAsFactors = FALSE)
    【解决方案2】:

    在基地也可以。

    setNames(data.frame(sapply(1:3, function(i) paste0(x[,i], y[,i])), 
                        stringsAsFactors=FALSE), names(x))
    #    x  y  z
    # 1 1a 4d 7g
    # 2 2b 5e 8h
    # 3 3c 6f 9i
    

    数据

    x <- structure(list(x = 1:3, y = 4:6, z = 7:9), class = "data.frame", row.names = c(NA, 
    -3L))
    
    y <- structure(list(x = structure(1:3, .Label = c("a", "b", "c"), class = "factor"), 
        y = structure(1:3, .Label = c("d", "e", "f"), class = "factor"), 
        z = structure(1:3, .Label = c("g", "h", "i"), class = "factor")), class = "data.frame", row.names = c(NA, 
    -3L))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      • 2011-05-07
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      相关资源
      最近更新 更多