首页 > 解决方案 > 如何使用 bind_rows() 合并数据集,同时将数据集的名称保留为变量

问题描述

我有一些要与 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")

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

list(df1, df2) %>%
  set_names(c("df1", "df2")) %>%
  bind_rows(.id = "name")

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

标签: rdplyrpurrr

解决方案


我们可以使用dplyr::lstor which 会自动返回带有参数purrr::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

推荐阅读