如果特定 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
.
才会打印出来
此代码读取 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
.