如果特定 sheet 中存在字符串,则使用 TRUE 或 FALSE 命名多个 xlsx 文件

Naming mutliple xlsx files with TRUE of FALSE if character string is present in a particular sheet

此代码读取 xlsx 文件并根据 sheet 数字和在特定位置找到的值(在本例中为 temp[2,1])创建单独命名的文件。但是由于每个文件和 sheet 略有不同所以名称不一致。

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") )
}}

如果特定字符串出现在 sheet 中的任何位置,我想要一种用 TRUE 或 FALSE 命名文件的方法,在本例中为 '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

因为你有一个tibble,而且不知道哪一列是哪一列, 我创建了这个:

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 returns TRUE.

才会打印出来