我正在尝试构建一个接受许多数据帧并将它们连接成一个数据帧的函数。我想了解最近对dplyr或purrr的更新?以及我将如何做到这一点。我尝试使用三重激励点!!!在我的功能中,但我仍然在努力做到这一点......
library(tidyverse)
df_1 = mtcars %>% slice(1:2)
df_2 = mtcars %>% slice(6:8)
df_3 = mtcars %>% slice(30:32)
get_bind_dfs = function(one_or_more_dfs ){
result = dplyr::bind_rows(one_or_more_dfs)
return(result)
}
get_bind_dfs(one_or_more_dfs = c(df1, df2, df3))
答案 0 :(得分:3)
我们可以传递vector
个字符串,然后使用mget
来获取值
get_bind_dfs <- function(str1 ){
dplyr::bind_rows(mget(str1, envir = .GlobalEnv))
}
get_bind_dfs(paste0("df_", 1:3))
# A tibble: 8 x 11
# mpg cyl disp hp drat wt qsec vs am gear carb
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 21.0 6.00 160 110 3.90 2.62 16.5 0 1.00 4.00 4.00
#2 21.0 6.00 160 110 3.90 2.88 17.0 0 1.00 4.00 4.00
#3 18.1 6.00 225 105 2.76 3.46 20.2 1.00 0 3.00 1.00
#4 14.3 8.00 360 245 3.21 3.57 15.8 0 0 3.00 4.00
#5 24.4 4.00 147 62.0 3.69 3.19 20.0 1.00 0 4.00 2.00
#6 19.7 6.00 145 175 3.62 2.77 15.5 0 1.00 5.00 6.00
#7 15.0 8.00 301 335 3.54 3.57 14.6 0 1.00 5.00 8.00
#8 21.4 4.00 121 109 4.11 2.78 18.6 1.00 1.00 4.00 2.00
或者将data.frames作为list
bind_rows
可以接受
get_bind_dfs <- function(one_or_more_dfs){
dplyr::bind_rows(one_or_more_dfs)
}
get_bind_dfs(list(df_1, df_2, df_3))
# A tibble: 8 x 11
# mpg cyl disp hp drat wt qsec vs am gear carb
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 21.0 6.00 160 110 3.90 2.62 16.5 0 1.00 4.00 4.00
#2 21.0 6.00 160 110 3.90 2.88 17.0 0 1.00 4.00 4.00
#3 18.1 6.00 225 105 2.76 3.46 20.2 1.00 0 3.00 1.00
#4 14.3 8.00 360 245 3.21 3.57 15.8 0 0 3.00 4.00
#5 24.4 4.00 147 62.0 3.69 3.19 20.0 1.00 0 4.00 2.00
#6 19.7 6.00 145 175 3.62 2.77 15.5 0 1.00 5.00 6.00
#7 15.0 8.00 301 335 3.54 3.57 14.6 0 1.00 5.00 8.00
#8 21.4 4.00 121 109 4.11 2.78 18.6 1.00 1.00 4.00 2.00
或者另一种选择是使用三个点作为参数,然后通过转换为quosures
library(purrr)
get_bind_dfs <- function(...) {
exprs <- rlang::enquos(...)
map(exprs, rlang::eval_tidy) %>%
bind_rows
}
get_bind_dfs(df_1, df_2, df_3)
# A tibble: 8 x 11
# mpg cyl disp hp drat wt qsec vs am gear carb
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 21.0 6.00 160 110 3.90 2.62 16.5 0 1.00 4.00 4.00
#2 21.0 6.00 160 110 3.90 2.88 17.0 0 1.00 4.00 4.00
#3 18.1 6.00 225 105 2.76 3.46 20.2 1.00 0 3.00 1.00
#4 14.3 8.00 360 245 3.21 3.57 15.8 0 0 3.00 4.00
#5 24.4 4.00 147 62.0 3.69 3.19 20.0 1.00 0 4.00 2.00
#6 19.7 6.00 145 175 3.62 2.77 15.5 0 1.00 5.00 6.00
#7 15.0 8.00 301 335 3.54 3.57 14.6 0 1.00 5.00 8.00
#8 21.4 4.00 121 109 4.11 2.78 18.6 1.00 1.00 4.00 2.00
当我们连接多个c
(data.frame
列的多个list
)时,它会丢失data.frame
属性并将列附加到list
c(df_1, df_2)