在R中使用mutate与正则表达式对日期列进行条件格式化
错误原因
- 括号语法错误:你的
ifelse函数的判断条件括号提前闭合,导致后续参数没有被正确传入ifelse,触发缺失类报错 - 匹配逻辑错误:
[:upper:]是正则表达式的字符类,不能直接用==和单个字符做等值判断,需要搭配正则匹配函数使用
修正后代码
library(tinyverse) library(lubridate) df <- df %>% mutate( # 判断首字符为大写字母则补01,否则保留原日期字符串 new_date_str = ifelse(str_detect(Date, "^[:upper:]"), paste("01", Date, sep = " "), Date), # 转换为标准日期格式 new_date = dmy(new_date_str) )
更简便的优化方案
无需手动判断字符串格式,利用lubridate的解析规则和coalesce函数可以一步完成转换,容错性更高:
df <- df %>% mutate( new_date = coalesce( dmy(Date), # 优先解析已带日的完整日期 dmy(paste0("01 ", Date)) # 解析失败的自动补01后再解析 ) )
内容的提问来源于stack exchange,提问作者Thomas Liou
相关产品推荐
相关产品推荐

