我有一个数据框(此处为 dfToc),其中包含数据框名称列表。我想用它来指定其他数据帧通过 tidyverse 命令 bind_rows 连接。如果我在 bind_rows 命令中显式命名其他数据帧,则串联有效,但如果我使用 dfToc 指定其他数据帧,则串联无效。这看起来很简单,但我很困惑。下面是一个简化的示例。
library(tidyverse)
df1 <- data.frame(Name = c("Jon", "Bill", "Maria", "Ben", "Tina"),
Score = c(23, 41, 32, 58, 26))
df2 <- data.frame(Name = c("Jon", "Bill", "Maria", "Ben", "Tina"),
Score = c(32, 14, 23, 85, 62))
dfToc <- data.frame(fn = c('df1' , 'df2'))
dfToc$fn
#> [1] "df1" "df2"
# explicitly naming the dataframes works
bind_rows(list(df1 , df2))
#> Name Score
#> 1 Jon 23
#> 2 Bill 41
#> 3 Maria 32
#> 4 Ben 58
#> 5 Tina 26
#> 6 Jon 32
#> 7 Bill 14
#> 8 Maria 23
#> 9 Ben 85
#> 10 Tina 62
# using dfToc to specify the dataframes results in an error
bind_rows(list(dfToc$fn))
#> Error in `bind_rows()`:
#> ! Argument 1 must be a data frame or a named atomic vector.
#> Backtrace:
#> ▆
#> 1. └─dplyr::bind_rows(list(dfToc$fn))
#> 2. └─rlang::abort(glue("Argument {i} must be a data frame or a named atomic vector."))
感谢您的帮助!
最佳答案
dfToc$fn
是表示数据帧名称的字符向量。它不是数据框列表,而这正是bind_rows
所需要的。要使用这些对象的名称将工作区中的多个对象放入列表中,我们可以使用 mget
:
bind_rows(mget(dfToc$fn))
#> Name Score
#> 1 Jon 23
#> 2 Bill 41
#> 3 Maria 32
#> 4 Ben 58
#> 5 Tina 26
#> 6 Jon 32
#> 7 Bill 14
#> 8 Maria 23
#> 9 Ben 85
#> 10 Tina 62
关于r - 使用数据帧列为r中的bind_rows指定数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76696003/