我的目录包含一个文件夹列表,其中包含一个名为“ ABC”的文件夹。此“ ABC”具有“ .xlsm”文件。我想使用R代码读取文件夹“ ABC”中的“ .xlsm”文件,该文件位于目录中的其他文件夹下。
谢谢您的帮助
答案 0 :(得分:0)
如果您已经知道每个文件的路径,则只需使用read_excel
包中的readxl
:
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)
答案 1 :(得分:0)
由于您的目录要求,查找所有文件的一种方法可以是双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=
。
答案 2 :(得分:0)
给出工作目录中id first second third fourth
1 THE MAD HATTER null
个文件的列表,您可以执行以下操作:
*.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)
}
)
,A
和B
,C
,生成的列表对应于:
D
>> lst_dta
[[1]]
C D
1 3 4
[[2]]
A B
1 1 2
开始的目录树中找到的所有.xlsm
文件。openxlsx
由于使用了Rcpp而非常有效。如果您要处理大量的MS Excel文件,恕我直言,这个软件包值得探索。正如@r2evans在评论中指出的那样,您可能想读取getwd()
文件夹中仅 个文件,而忽略*.xlsm
个文件在ABC
文件夹之外。您可以通过以下方式过滤文件矢量:
*.xlsm
不太可能,如果您有ABC
个文件,这些文件的名称中包含grep(pattern = "ABC", x = files_to_read, value = TRUE)
个字符串,并且保存在*.xlsm
文件夹之外,则可能会得到更多匹配项。