来自以下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 = .))
您可以使用purrr
的imap
:
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]))