如何更改列表中的df列名称

时间:2018-02-03 20:59:00

标签: r list tidyverse

我有一个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

2 个答案:

答案 0 :(得分:4)

您可以使用dplyr::bind_rows结合tidyr::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

答案 1 :(得分:1)

第一步可能很棘手,但如果你迭代transformed <- sapply(names(my_list), function(name) { df <- my_list[[name]] colnames(df)[colnames(df) == 'Class'] <- name df }, simplify = FALSE, USE.NAMES = TRUE) 则很简单。

purrr::reduce

使用dplyr::full_joinpurrr::reduce(transformed, dplyr::full_join) # Type one two # 1 1 a a # 2 2 a a # 3 3 b b 可以获得结果:

String simplenumber= "10";
int num = Integer.parseInt(simplenumber);