【问题标题】:How to merge dataframe within a list by the same name in R?如何在R中以相同名称合并列表中的数据框?
【发布时间】:2019-01-31 21:32:30
【问题描述】:

我有一个包含很多数据框的列表。如果它们具有相同的名称,我想合并它们,即合并所有具有相同名称“a”和“b”的数据框。像这样

a <- "aaaaa"
b <- "bbbbb"
c <- "ccccc"

g <- list(df1 <- data.frame(a,b), mf2 <- data.frame(b,b),
      mf1 <- data.frame(c,b), df2 <- data.frame(a,c),
      mf3 <- data.frame(b,c))
names(g) <- c("a","b","a","b","c")
> g
$`a`
      a     b
1 aaaaa bbbbb
$b
      b   b.1
1 bbbbb bbbbb
$a
      c     b
1 ccccc bbbbb
$b
      a     c
1 aaaaa ccccc
$c
      b     c
1 bbbbb ccccc
#I want to merge them by names and ideal result should be
$`a`
      a     b     c     b
1 aaaaa bbbbb ccccc bbbbb
$b
      b   b.1     a     c
1 bbbbb bbbbb aaaaa ccccc
$c
      b     c
1 bbbbb ccccc

我想按名称合并它们,理想的结果应该像上面的那样。我该怎么做?

【问题讨论】:

    标签: r list dataframe merge


    【解决方案1】:

    这是tidyverse 解决方案。我们可以按名称拆分列表,然后使用bind_cols 组合每个组的数据框。

    library(tidyverse)
    
    g2 <- map(split(g, names(g)), bind_cols)
    g2
    # $`a`
    #       a     b     c    b1
    # 1 aaaaa bbbbb ccccc bbbbb
    # 
    # $b
    #       b   b.1     a     c
    # 1 bbbbb bbbbb aaaaa ccccc
    # 
    # $c
    #       b     c
    # 1 bbbbb ccccc
    

    基本的 R 等效项如下。

    g2 <- lapply(split(g, names(g)), function(x) do.call(cbind, x))
    g2
    # $`a`
    #     a.a   a.b   a.c   a.b
    # 1 aaaaa bbbbb ccccc bbbbb
    # 
    # $b
    #     b.b b.b.1   b.a   b.c
    # 1 bbbbb bbbbb aaaaa ccccc
    # 
    # $c
    #     c.b   c.c
    # 1 bbbbb ccccc
    

    【讨论】:

      猜你喜欢
      • 2019-01-10
      • 1970-01-01
      • 2023-02-24
      • 2021-07-13
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      相关资源
      最近更新 更多