R语言:如何从Notes列提取关联PlanA的日期至新列?
从Notes列提取与PlanA关联日期的解决方法
报错原因
你的代码存在两个核心问题:
substring()函数不支持正则匹配,用它来处理带正则逻辑的日期提取本身就不对;- 字符串嵌套双引号且未正确转义反斜杠,导致语法错误——R里双引号包裹的字符串中,反斜杠需要写成
\\,而你既没转义也没正确闭合双引号,才会出现unexpected '\\'的报错。
正确实现方式
推荐方法:用stringr包(语法更直观)
先安装并加载包,再通过正则精准提取关联日期:
# 安装并加载stringr包 install.packages("stringr") library(stringr) # 提取位于PlanA之前的关联日期 DF <- DF %>% mutate(NoteDate = str_extract(Notes, "\\d+/\\d+/\\d+(?=.*PlanA)"))
\\d+/\\d+/\\d+匹配数字/数字/数字格式的日期;(?=.*PlanA)是正向预查规则,确保提取的日期后存在PlanA(如果日期在PlanA之后,把正则改成(?<=PlanA.*)\\d+/\\d+/\\d+即可)。
不用额外包的base R写法
如果不想安装第三方包,用base R的正则匹配函数也能实现:
# 提取日期,需加perl=TRUE支持高级正则语法 DF$NoteDate <- regmatches(DF$Notes, regexpr("\\d+/\\d+/\\d+(?=.*PlanA)", DF$Notes, perl = TRUE))
兼容日期在PlanA前后的通用写法
如果日期可能出现在PlanA的任意一侧,用以下正则覆盖两种场景:
DF <- DF %>% mutate(NoteDate = str_extract(Notes, "\\d+/\\d+/\\d+(?=.*PlanA)|(?<=PlanA.*)\\d+/\\d+/\\d+"))
内容的提问来源于stack exchange,提问作者user21514922
相关产品推荐
相关产品推荐

