如何使用R

时间:2018-08-08 15:57:50

标签: r

我的目录包含一个文件夹列表,其中包含一个名为“ ABC”的文件夹。此“ ABC”具有“ .xlsm”文件。我想使用R代码读取文件夹“ ABC”中的“ .xlsm”文件,该文件位于目录中的其他文件夹下。

谢谢您的帮助

3 个答案:

答案 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) } ) ABC,生成的列表对应于:

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文件夹之外,则可能会得到更多匹配项。