如何在R中通过向量操作条件重命名文件名向量元素?
用R向量操作批量修改文件名前缀
现有如下带日期后缀的文件名向量(示例中当日为20240618,昨日为20240617):
fileNames <- c("Accounts-20240617.csv", "Advisors-20240617.csv", "Customer Names-20240618.csv", "Sales-20240617.csv", "Transactions-20240618.csv", "Users-20240617.csv")
需要批量修改前缀:含当日日期的文件名前加t-,含昨日日期的加y-,最终得到:
modifiedFileNames <- c("y-Accounts-20240617.csv", "y-Advisors-20240617.csv", "t-Customer Names-20240618.csv", "y-Sales-20240617.csv", "t-Transactions-20240618.csv", "y-Users-20240617.csv")
不用for循环,仅用R的向量操作就能实现,以下是几种简洁方法:
方法1:基础向量操作(grepl + ifelse)
利用grepl批量判断每个文件名是否包含目标日期,再通过ifelse批量拼接前缀:
today_date <- "20240618" yesterday_date <- "20240617" modifiedFileNames <- ifelse(grepl(today_date, fileNames), paste0("t-", fileNames), paste0("y-", fileNames))
方法2:stringr包向量化字符串处理
如果习惯用tidyverse生态工具,stringr的向量化替换可以更简洁地完成任务:
library(stringr) # 方式1:根据日期检测结果添加前缀 modifiedFileNames <- str_replace(fileNames, "^", ifelse(str_detect(fileNames, "20240618"), "t-", "y-")) # 方式2:直接匹配日期段替换,逻辑更直观 modifiedFileNames <- str_replace(fileNames, "(.*)-20240618\\.csv", "t-\\1-20240618.csv") %>% str_replace("(.*)-20240617\\.csv", "y-\\1-20240617.csv")
内容的提问来源于stack exchange,提问作者ThingyBlahBlah3
相关产品推荐
相关产品推荐

