【问题标题】:How to change the df column name within a list如何更改列表中的 df 列名
【发布时间】:2018-07-14 02:14:00
【问题描述】:

我有一个 dfs 列表。 dfs 都具有相同的列名。我想:

(1) 将其中一个列名更改为列表中df的名称

(2)full_join改名后的所有dfs

我的列表示例:

my_list <- list(one = data.frame(Type  = c(1,2,3), Class = c("a", "a", "b")),
                two = data.frame(Type  = c(1,2,3), Class = c("a", "a", "b")))

我想要的输出:

data.frame(Type = c(1,2,3),
           one  = c("a", "a", "b"),
           two  = c("a", "a", "b"))

  Type one two
    1   a   a
    2   a   a
    3   b   b

【问题讨论】:

    标签: r list tidyverse


    【解决方案1】:

    您可以将dplyr::bind_rowstidyr::spread 结合使用来获得相同的结果(如果您愿意考虑其他方法)。例如:

    library(tidyverse)
    my_list %>% bind_rows(.id = "groups") %>% spread(groups, Class)
    
    #>   Type one two
    #> 1    1   a   a
    #> 2    2   a   a
    #> 3    3   b   b
    

    【讨论】:

    • 这太棒了。
    【解决方案2】:

    第一步可能很棘手,但如果您遍历 names(my_list) 就很简单。

    transformed <- sapply(names(my_list), function(name) {
      df <- my_list[[name]]
      colnames(df)[colnames(df) == 'Class'] <- name
      df
    }, simplify = FALSE, USE.NAMES = TRUE)
    

    使用purrr::reducedplyr::full_join可以得到结果:

    purrr::reduce(transformed, dplyr::full_join)
    #   Type one two
    # 1    1   a   a
    # 2    2   a   a
    # 3    3   b   b
    

    【讨论】:

      猜你喜欢
      • 2021-05-15
      • 2021-04-26
      • 2020-01-10
      • 2021-03-11
      • 2022-12-07
      • 2021-12-05
      • 2016-10-25
      • 2021-06-01
      • 1970-01-01
      相关资源
      最近更新 更多