当R

时间:2018-10-24 22:59:41

标签: r excel

我有数千个excel文件。首先,我将文件的名称读入列表。

示例列表如下

> file.list
[1] 'file1.xlsx'
[2] 'file2.xlsx'
[3] 'file3.xlsx'
...
[1000] 'file1000.xlsx'

每个文件都包含一个选项卡,该选项卡的名称带有“ Quote”字符串(选项卡的名称可以是EQuote,E-Quote或EQuote xxx)。我需要阅读此选项卡,并执行一些步骤来清理Datafram。因此,我编写了以下代码来清理数据框。

whole_data <- lappy(file.list, function(file){
   sheet <- readxl::excel_sheet(file)
   quote_sheets <- sheets[grepl('Quote', sheet, ignore.case = FALSE)]
   df <- read-excel(file, sheet = quote_sheets)

   ...the cleaning steps...

   df
})

我发现某些excel文件中的“报价”选项卡为空,因此当选项卡为空时,清理步骤将无效。

您能帮我找出带有空白“报价”标签的文件,然后从file.list中删除该文件的名称吗?

例如,如果file1.xlsx的“ Quote”选项卡为空,则该代码将帮助我找出并自动将其从列表中删除。然后像这样打开file.list:

> file.list
[1] 'file2.xlsx'
[2] 'file3.xlsx'
...
[999] 'file1000.xlsx'

因此,我不需要手动检查数千个文件来查看此文件的“报价”标签是否为空。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以修改功能以跳过那些文件。请注意,我已更正了您的代码中的某些错字。如果每个文件中都有多个报价单,则需要一个接一个地处理它们,这在此代码块中不考虑。

编辑:被认为是空白纸。

library(readxl)
file.list = dir(".", pattern = "*.xls")

whole_data <- lappy(file.list, function(file) {
  sheet <- excel_sheets(file)
  quote_sheets <- sheet[grepl('Quote', sheet, ignore.case = FALSE)]
  if (length(quote_sheets) > 0) {
    df <- read_excel(file, sheet = quote_sheets)
    if (nrow(df) > 0) {
      ...the cleaning steps...

      df
    }
  } else
    NA
})