【问题标题】:[R]give a column to each tibble in a list[R]为列表中的每个小标题指定一列
【发布时间】:2020-05-17 01:08:52
【问题描述】:

来自以下 tbl_list 的陈述

tbl1 = tibble(a = c(1, 2), b = c(3, 4))
tbl2 = tibble(a = c(10, 20), b = c(30, 40))
tbl_list = list(tbl1, tbl2)
tbl_names = c("tbl1", "tbl2")
names(tbl_list) = tbl_names

我的目标是

   e_tbl_list = list(tibble(a = c(1, 2), 
                         b = c(3, 4), 
                         tbl_name = c("tbl1", "tbl1")), 
                  tibble(a = c(10, 20), 
                         b = c(30, 40), 
                         tbl_name = c("tbl2", "tbl2"))
                  ) 

但是,使用此代码时它不起作用

 a_tbl_list = tbl_names %>% map(~ tbl_list[[.]] %>% mutate(tbl_name = .))

【问题讨论】:

    标签: r purrr tibble


    【解决方案1】:

    你可以使用purrrimap

    library(purrr)
    imap(tbl_list, ~.x %>% dplyr::mutate(tbl_name = .y))
    
    #$tbl1
    # A tibble: 2 x 3
    #      a     b tbl_name
    #  <dbl> <dbl> <chr>   
    #1     1     3 tbl1    
    #2     2     4 tbl1    
    
    #$tbl2
    # A tibble: 2 x 3
    #      a     b tbl_name
    #  <dbl> <dbl> <chr>   
    #1    10    30 tbl2    
    #2    20    40 tbl2    
    

    Map 在基础 R 中:

    Map(cbind, tbl_list, tbl_name = names(tbl_list))
    #purrr equivalent
    #map2(tbl_list, names(tbl_list), cbind)
    

    使用lapply

    lapply(seq_along(tbl_list), function(x) 
           cbind(tbl_list[[x]], tbl_name = names(tbl_list)[x]))
    #purrr equivalent
    #map(seq_along(tbl_list), ~cbind(tbl_list[[.x]], tbl_name = names(tbl_list)[.x]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      相关资源
      最近更新 更多