Я начинаю ходить кругами. Я чувствую, что тщательно искал в Интернете, но подозреваю, что не могу увидеть дерево для деревьев уже после нескольких дней возвращения к этой проблеме.
Я собираюсь собрать несколько наборов данных из тысяч файлов Excel в компании SharePoint. Мне удалось успешно очистить с помощью readxl.
library(readxl)
library(data.table)
library(XLConnect)
root_URL <- '//companyname.office.abc.com/sites/thesite/thefolder')
folder.list <- list.dirs(root_URL)
file.list <- list.files(folder.list, pattern = "*.(xlsx|XLSX|xls|XLS|xlsm|XLSM|xlsb|XLSB)$",full.names = T,include.dirs = T)
Что приводит к хорошему списку всех файлов, которые я потенциально должен почистить. Я успешно извлек необходимые данные из определенной вкладки («Адрес») из 3-го, 4-го и 5-го файлов в моем списке, используя следующий код.
ex.list <- file.list[3:5]
ex.list <- setNames(ex.list, ex.list)
df.list <- lapply(ex.list, read_excel, sheet = 'Address' )
df.list <- Map(function(df, name) {
df$source_name <- name
df
}, df.list, names(df.list))
df <- rbindlist(df.list, idcol = "id")
write.csv(df,"testdata1.csv")
Проблема, с которой я столкнулся, заключается в том, что 1-й, 2-й (и другие файлы) не имеют вкладки под названием «Адрес», и мне нужно исключить эти файлы из моего file.list, но, поскольку это список векторов символов, я пытаюсь отфильтровать список, чтобы исключить, когда файл не содержит вкладку под названием «Адрес»
Я использовал lappy со следующим результатом и даже пробовал sapply (также поделился), но сейчас пытаюсь написать условное выражение. Чувствую себя очень близко, но очень далеко.
> aa <- lapply(ex.list, excel_sheets)
> aa
[[1]]
[1] "NODE SIDE A" "NODE SIDE B" "LMA" "BASE" "TUBE" "Notes"
[[2]]
[1] "NODE SIDE A" "LMA" "BASE" "TUBE" "Notes"
[[3]]
[1] "Equipment-Details" "Address" "Drop Down Values" "Validation Status" "EquipMaster"
[[4]]
[1] "Equipment-Details" "Address" "Drop Down Values" "Validation Status" "EquipMaster"
[[5]]
[1] "Equipment-Details" "Address" "Drop Down Values" "Validation Status" "EquipMaster"
> bb <- sapply(ex.list, excel_sheets)
> bb
$'//companyname.office.abc.com/sites/thesite/thefolder/subfolder/file1.xls`
[1] "NODE SIDE A" "NODE SIDE B" "LMA" "BASE" "TUBE" "Notes"
$`//companyname.office.abc.com/sites/thesite/thefolder/subfolder/file2.xls`
[1] "NODE SIDE A" "LMA" "BASE" "TUBE" "Notes"
$`//companyname.office.abc.com/sites/thesite/thefolder/subfolder/file3.xls`
[1] "Equipment-Details" "Address" "Drop Down Values" "Validation Status" "EquipMaster"
$`//companyname.office.abc.com/sites/thesite/thefolder/subfolder/file4.xls`
[1] "Equipment-Details" "Address" "Drop Down Values" "Validation Status" "EquipMaster"
$`//companyname.office.abc.com/sites/thesite/thefolder/subfolder/file5.xls`
[1] "Equipment-Details" "Address" "Drop Down Values" "Validation Status" "EquipMaster"