簡體   English   中英

如何使用R讀取文件夾中的.xlsm文件,該文件夾存在於其他文件夾中

[英]How to read .xlsm files in a folder, a folder that is present in different folders using R

我的目錄包含一個文件夾列表,其中包含一個名為“ ABC”的文件夾。 此“ ABC”具有“ .xlsm”文件。 我想使用R代碼讀取文件夾“ ABC”中的“ .xlsm”文件,該文件位於目錄中的其他文件夾下。

謝謝您的幫助

如果你已經知道的路徑的每個文件,然后只需使用read_excelreadxl包:

library(readxl)
mydata <- read_excel("ABC/myfile.xlsm")

如果您首先需要獲取每個文件的路徑,則可以使用系統命令(我在Ubuntu 18.04上)查找所有路徑並將其存儲在向量中。 然后,您可以一次導入一個:

myshellcommand <- "find /path/to/top/directory -path '*/ABC/*' -type d"
mypaths <- system(command = myshellcommand, intern = TRUE)

由於您的目錄要求,查找所有文件的一種方法可以是雙重list.files

ld <- list.files(pattern="^ABC$", include.dirs=TRUE, recursive=TRUE, full.names=TRUE)
lf <- list.files(ld, pattern="\\.xlsm$", ignore.case=TRUE, recursive=TRUE, full.names=TRUE)

要將它們全部讀入列表(用於處理幀列表的良好參考: http : //stackoverflow.com/a/24376207/3358272 ):

lstdf <- sapply(lf, read_excel, simplify=FALSE)

默認情況下,打開每個工作簿中的第一張工作表。 readxl::read_excel中的其他可能有用的選項: sheet=range=skip=n_max=

給定工作目錄中的*.xlsm文件列表,您可以執行以下操作:

list.files(
    path = getwd(),
    pattern = glob2rx(pattern = "*.xlsm"),
    full.names = TRUE,
    recursive = TRUE
) -> files_to_read

lst_dta <- lapply(
    X = files_to_read,
    FUN = function(x) {
        cat("Reading:", x, fill = TRUE)
        openxlsx::read.xlsx(xlsxFile = x)
    }
)

結果

給定兩個文件,每個文件都有兩列ABCD ,生成的列表對應於:

>> lst_dta
[[1]]
  C D
1 3 4

[[2]]
  A B
1 1 2

筆記

  • 這將從getwd()開始讀取在目錄樹中找到的所有.xlsm文件。
  • 由於使用了Rcpp, openxlsx非常有效。 如果您要處理大量的MS Excel文件,恕我直言,此軟件包值得探討。

編輯

正如指出的@ r2evans的評論,你可能需要閱讀*.xlsm 駐留內的文件ABC文件夾忽略*.xlsm外部文件ABC文件夾。 您可以通過以下方式過濾文件向量:

grep(pattern = "ABC", x = files_to_read, value = TRUE)

不太可能,如果您的*.xlsm文件的名稱帶有ABC字符串,並且保存在ABC文件夾之外,則可能會得到額外的匹配項。

暫無
暫無

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

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