【发布时间】:2021-05-22 18:15:10
【问题描述】:
我在 for 循环中堆叠可变数量的数据帧时遇到了麻烦。有人可以帮帮我吗?
# Load libraries
library(dplyr)
library(tidyverse)
library(here)
一个应该打开所有excel文件并使用plyr::rbind.fill()创建一个文件的函数:
stackDfs <- function(filenames){
for(fn in filenames){
df1 <- openxlsx::read.xlsx(here::here("folder1", "folder2", fn), sheet=6, detectDates = TRUE)
# ... do some additional mutations here
}
all_dfs <- (plyr::rbind.fill(df1, df2, df3, df4, ...)
return(all_dfs)
}
我在这里定义应该打开哪些文件并调用堆栈函数。要堆叠的文件数量应该是可变的。
filenames <- c("filexy-20210202.xlsx", "filexy-2021-20210205.xlsx")
stackDfs(filenames)
【问题讨论】:
-
您已经有了解决方案。但是你试过 purrr::map 或 dplyr::bind_rows 吗?
purrr::map_dfr(filenames, ~openxlsx::read.xlsx(here::here("folder1", "folder2", .x), sheet=6, detectDates = TRUE))你不需要 for 循环和新函数。
标签: r dplyr stack tidyverse plyr