【问题标题】:Recover list names after applying purrr reduce r应用 purrr reduce r 后恢复列表名称
【发布时间】:2018-12-28 23:10:51
【问题描述】:

有没有办法在使用purrr::reduce后避免丢失列表的名称属性?

示例

我有一个清单:

library(tidyverse)
l <- list(A = data_frame(ID = c(101, 102, 103),
                         x = c(1,2,3)),
          B = data_frame(ID = c(101, 102, 103),
                         x = c(4,5,6)),
          C = data_frame(ID = c(101, 102, 103),
                         x = c(7,8,9)))

我可以使用reduce 加入“ID”上的列表,然后使用setNames 像这样命名列。

l %>% 
  purrr::reduce(left_join, by = "ID") %>% 
  setNames(c("ID", names(l)))

但我想获取此列表并将其直接通过管道传输到purrr::reduce,然后重命名列“A”、“B”和“C”而不创建对象l,但是当我这样做时,列表名称不再可用。

问题

我可以对下面的代码做些什么来更改列“x”的名称,而无需创建列表l 或指定各个列名称?

list(A = data_frame(ID = c(101, 102, 103),
                    x = c(1,2,3)),
     B = data_frame(ID = c(101, 102, 103),
                    x = c(4,5,6)),
     C = data_frame(ID = c(101, 102, 103),
                    x = c(7,8,9))) %>% 
  purrr::reduce(left_join, by = "ID")

【问题讨论】:

    标签: r list purrr names


    【解决方案1】:

    您可以在合并之前使用 purrr 中的 imapset_names 重命名列

    library(purrr)
    list(A = data_frame(ID = c(101, 102, 103),
                        x = c(1,2,3)),
         B = data_frame(ID = c(101, 102, 103),
                        x = c(4,5,6)),
         C = data_frame(ID = c(101, 102, 103),
                        x = c(7,8,9))) %>% 
      imap(.x = ., ~ set_names(.x, c("ID", .y))) %>% 
      reduce(dplyr::left_join, by = "ID")
    # A tibble: 3 x 4
    #     ID     A     B     C
    #  <dbl> <dbl> <dbl> <dbl>
    #1   101     1     4     7
    #2   102     2     5     8
    #3   103     3     6     9
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 2022-08-09
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 2016-01-19
      相关资源
      最近更新 更多