如何使用 bind_rows() 合并数据集,同时将数据集的名称保留为变量

Dr.*_*gan 2 r dplyr purrr

我有几个数据集与 bind_rows 合并在一起。我的代码看起来像这样

df1 <- data.frame(v1 = 1:10, v2 = 11:20)
df2 <- data.frame(v1 = 11:20, v2 = 1:10)

list(df1, df2) %>%
  bind_rows(.id = "name")
Run Code Online (Sandbox Code Playgroud)

我希望该name列能够阅读"df1"fordf1"df2"for df2。我知道我可以用来set_names()手动执行此操作...

list(df1, df2) %>%
  set_names(c("df1", "df2")) %>%
  bind_rows(.id = "name")
Run Code Online (Sandbox Code Playgroud)

...但我想要一种以编程方式执行此操作的方法,无论数据集名称是什么。我怎样才能做到这一点?

akr*_*run 5

我们可以使用dplyr::lstorpurrr::lst会自动返回list带有参数的命名

library(dplyr)
dplyr::lst(df1, df2) %>%
  bind_rows(.id = "name")
#   name v1 v2
#1   df1  1 11
#2   df1  2 12
#3   df1  3 13
#4   df1  4 14
#5   df1  5 15
#6   df1  6 16
#7   df1  7 17
#8   df1  8 18
#9   df1  9 19
#10  df1 10 20
#11  df2 11  1
#12  df2 12  2
#13  df2 13  3
#14  df2 14  4
#15  df2 15  5
#16  df2 16  6
#17  df2 17  7
#18  df2 18  8
#19  df2 19  9
#20  df2 20 10
Run Code Online (Sandbox Code Playgroud)