簡體   English   中英

讀取 excel 文件的文件夾並將單個工作表作為單獨的 df 導入 R 中的名稱

[英]Read a folder of excel files and import individual sheets as separate df's in R with Names

我有一個包含多個工作表的 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 Analysis of Data.xlsx”。

我希望我可以在沒有代碼的情況下重現您的示例。 我會創建一個函數來更好地控制新文件名。

我會建議:

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)

讓我知道它是否有效。 我假設您只是針對“余額”表?

您可以執行以下操作(請注意,我使用 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM