我有数千个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'
因此,我不需要手动检查数千个文件来查看此文件的“报价”标签是否为空。
感谢您的帮助!
答案 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
})