r - 如果特定工作表中存在字符串,则使用 TRUE 为 FALSE 命名多个 xlsx 文件
问题描述
此代码读取 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
解决方案
由于您有一个小标题,并且不知道哪个列具有哪种类型,所以我创建了这个:
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)
and来缩短名称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
。
推荐阅读
- linux - Ubuntu -- Nautilus 脚本不会运行“srm”来安全擦除文件
- node.js - 使用 React/Node 进行 JWT 身份验证
- python - Python自定义类型在嵌套类型的自定义对象上使用静态方法`__getitem__`
- c# - 如何在 MVC 中的 OAuth 期间获取 Facebook/Google/Twitter 详细信息?
- python - 在python中交换变量
- flutter - Flutter Navigator 移除直到
- r - R根据条件行制作条件列
- modal-dialog - 在 oracle apex 20.1 中打开另一个模式页面内的模式页面而不关闭父模式页面
- go - bufio.Reader 在 bufio.Writer 写入后什么也不从文件中读取
- android - Google Play 开发者控制台:如何获取通知电子邮件(应用访问受限)?