Именование одинаковых файлов xlsx с TRUE of FALSE, если на определенном листе присутствует символьная строка - PullRequest
0 голосов
/ 18 октября 2018

Этот код читает файл xlsx и создает индивидуально именованные файлы на основе номера листа и значения, найденного в определенном месте (в данном случае temp [2,1]).Однако из-за того, что каждый файл и лист немного отличаются друг от друга, имена являются несовместимыми.

sheet_to_read <- c(11,12,13,14)
for( excelsheet in files) {
for (sheet in sheet_to_read) {
temp <- read_excel( path = excelsheet, sheet = sheet, col_names = FALSE)
write.csv( temp, file = paste0( "./", gsub("./", "", excelsheet), temp[2,1], sheet,".csv") )
}}

Мне бы хотелось, чтобы это был способ присвоения имен файлам ИСТИНА или ЛОЖЬ, если в каком-либо месте листа присутствует определенная символьная строка, в данном случае «vivax».Так что в этом случае:

GBD2016_2_915_Boletin Epidemiologico_2016_37sheet21true.xls
GBD2016_2_915_Boletin Epidemiologico_2016_37sheet22false.xls`

Файл примера: https://drive.google.com/file/d/1p4HAuFl7Codine1Vvb8SzA7OHTzraaHz/view?usp=sharing

1 Ответ

0 голосов
/ 18 октября 2018

Так как у вас есть тиббл, и неизвестно, какой столбец имеет какой тип, я создал это:

isWordInTibble <- function(word, tibble) {
  # case insensitive
  any(unlist(
    sapply(1:ncol(tibble), 
           function(i) tolower(word) %in% tolower(as.character(unlist(tibble[, i]))))))
}

Он смотрит, находится ли слово в каком-либо из векторов столбцов - просматривает все столбцы.

Замените аргумент файла в вашей команде write.csv на:

file = gsub(".xls", 
            paste0(substr(temp[2, 1], 
                          1, 
                          5), # just first 5 letters
                   gsub("sheet", "", sheet), 
                   substr(tolower(as.character(isWordInTibble("vivax", tmp))),
                          1, 
                          1), # just first letter ("t" or "f") 
                   ".csv"), 
            excelsheet)

Тогда это может сработать!

Я попытался сократить имена, используя substr(, start, end) иgsub().

Приложение

Поскольку вы спросили, как печатать, то только файлы, содержащие слово, но не те, которые его не содержат:

В вашем примере вместо команды write.csv() замените ее на:

if (isWordInTibble("vivax", tmP)) {
  write.csv(temp, 
            file = gsub(".xls", 
                        paste0(substr(temp[2, 1], 
                                      1, 
                                      5), # just first 5 letters
                               gsub("sheet", "", sheet), 
                               substr(tolower(as.character(isWordInTibble("vivax", temp))),
                                      1, 
                                      1), # just first letter ("t" or "f") 
                               ".csv"), 
                        excelsheet))
}

Тогда она выводится на печать, только если isWordInTibble возвращает TRUE.

...