在函数中堆叠不同的数据帧
stack different dataframes in a function
我无法在 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)
使用当前设置,我们可以初始化一个 list
,将数据读入 list
,然后在 do.call
中应用 rbind.fill
stackDfs <- function(filenames){
out_lst <- vector('list', length(filenames))
names(out_list) <- filenames
for(fn in filenames){
out_list[[fn]] <- openxlsx::read.xlsx(here::here("folder1",
"folder2", fn), sheet=6, detectDates = TRUE)
#....
}
all_dfs <- do.call(plyr::rbind.fill, out_lst)
all_dfs
}
根据关于使用 purrr 的评论,如果将所有文件放在同一个文件夹中,则可以使用名为 fs 的包而不是手动输入所有文件名:
library(tidyverse)
library(here)
library(fs)
filenames <- fs::dir_ls(here("files"))
all_dfs <- filenames %>%
map_dfr(openxlsx:read.xlsx, sheet = 6, detectDates = TRUE)
all_dfs
我无法在 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)
使用当前设置,我们可以初始化一个 list
,将数据读入 list
,然后在 do.call
rbind.fill
stackDfs <- function(filenames){
out_lst <- vector('list', length(filenames))
names(out_list) <- filenames
for(fn in filenames){
out_list[[fn]] <- openxlsx::read.xlsx(here::here("folder1",
"folder2", fn), sheet=6, detectDates = TRUE)
#....
}
all_dfs <- do.call(plyr::rbind.fill, out_lst)
all_dfs
}
根据关于使用 purrr 的评论,如果将所有文件放在同一个文件夹中,则可以使用名为 fs 的包而不是手动输入所有文件名:
library(tidyverse)
library(here)
library(fs)
filenames <- fs::dir_ls(here("files"))
all_dfs <- filenames %>%
map_dfr(openxlsx:read.xlsx, sheet = 6, detectDates = TRUE)
all_dfs