[[R]将一列赋予列表中的每个小标题

问题描述 投票:0回答:1

来自以下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个回答
0
投票

您可以使用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    

或以R为基的Map

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]))
© www.soinside.com 2019 - 2024. All rights reserved.