此代码读取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”)存在特定的字符串,我想使用TRUE或FALSE来命名文件。因此,在这种情况下:
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
答案 0 :(得分:1)
由于您有小标题,而且不知道哪一列具有哪种类型, 我创建了这个:
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
时打印。