读取 excel 文件的文件夹,并将单个工作表作为单独的 df 导入 R 中的名称



我有一个包含多个表格的excel文件文件夹。在每个wb中,表的名称是相同的。我试图导入一个特定的命名表为所有excel文件作为单独的数据框架。我已经能把它们导入;然而,名字变成了df_1, df_2, df_3,等等…我一直在尝试使用excel文件名的第一个单词并使用它来识别df.

Excel文件名称"AAPL多个工作表"该报表将被命名为"余额"。我导入的是df。我想要"AAPL Balance df";作为结果。

最接近我在下面寻找的代码,然而,它将每个数据帧命名为df_1, df_2,等等。

library(purrr)
library(readxl)
files_list <- list.files(path = 'C:/Users/example/Drive/Desktop/Total_Related_Data/Analysis of Data/',
pattern = "*.xlsx",full.names = TRUE)
files_list %>% 
walk2(1:length(files_list),
~ assign(paste0("df_", .y), read_excel(path = .x), envir = globalenv()))

我尝试在past0函数中使用文件路径变量'file_list'来标记它们,并以

结束df_C:/Users/example/Drive/Desktop/Total_Related_Data/Analysis of Data/。xlsx1, df_C:/Users/example/Drive/Desktop/Total_Related_Data/Analysis of Data/.xlsx2,

等等

我试着列出要使用的文件名列表。这将读取文件名并创建一个列表,但我无法使用上面的代码使其工作。

files_Names<-list.files(path='C:/Users/example/Drive/Desktop/Total_Related_Data/Analysis of Data/', pattern=NULL, all.files=FALSE, full.names=FALSE)

结果是,AAPL数据分析。xlsx&;对于列表中的所有文件。

您可以执行以下操作(请注意,我使用openxlsx包读取Excel文件,但您当然可以将该部分替换为readxl):

library(openxlsx)
library(tidyverse)
Starting with your `files_list` we can do:
# using lapply to read in all files and store them as list elements in one list
list_of_dfs <- lapply(as.list(files_list), function(x) readWorkbook(x, sheet = "Balance"))
# Create a vector of names based on the first word of the filename + "Balance"
# Note that we can't use empty space in object names, hence the underscore
df_names <- paste0(str_extract(basename(files_list), "[^ ]+"), "_Balance_df")
# Assign the names to our list of dfs
names(list_of_dfs) <- df_names
# Push the list elements (i.e. data frames) to the Global environment
# I highly recommend NOT doing this. I'd say in 99% of the cases it's better to continue working in the list structure or combine the individual dfs into one large df.
list2env(list_of_dfs, env = .GlobalEnv)

我希望我可以复制你的例子没有代码。我将创建一个函数来对新的文件名有更多的控制。

我建议:

library(purrr)
library(readxl)
library(openxlsx)
target_folder <- 'C:/Users/example/Drive/Desktop/Total_Related_Data/Analysis of Data'
files_list <- list.files(path = target_folder,
pattern = "*.xlsx", full.names = TRUE)
tease_out <- function(file) {
data <- read_excel(file, sheet = "Balance")
filename <- basename(file) %>% tools::file_path_sans_ext()
new_filename <- paste0(target_folder, "/", fileneame, "Balance df.xlsx")

write.xlsx(data, file = new_filename)
}
map(file_list, tease_out)

让我知道它是否有效。我猜你的目标是"余额"表?

最新更新