帮你写了个 combo_fun()
函数,以后遇到同样的问题可以直接用这个 function。用 ls()
环境不理想,最好封装成函数,同时也方便测试。
#' rbind of multiple data frames by names
#' @param df_names vector of data frame objects
#' @return A combined data frame
combo_fun <- function(df_names){
list_output <- lapply(df_names, function(x){
eval( rlang::sym(c(x)) )
})
output <- do.call(rbind, list_output)
return(output)
}
验证:这里是最小化例子的数据year1
, year2
, 和 year3
year1 <- data.frame(
col1 = runif(3),
year = "year1"
)
year2 <- data.frame(
col1 = runif(3),
year = "year2"
)
year3 <- data.frame(
col1 = runif(3),
year = "year3"
)
带入上述函数:
> combo_fun(c("year1", "year2", "year3"))
col1 year
1 0.39937419 year1
2 0.01247279 year1
3 0.20676021 year1
4 0.40227185 year2
5 0.56144374 year2
6 0.11426913 year2
7 0.54359644 year3
8 0.29754181 year3
9 0.41397444 year3
现在套用到你的例子里,因为你的数据框们是从 year1 到 year100, 所以用 paste0("year", 1:100)
建立所有的数据框名称,然后用 combo_fun(df_years)
即可。
df_years <- paste0("year", 1:100)
combo_fun(df_years)
以后遇到同样的情况也可以用这种方法。