【发布时间】:2017-09-23 02:34:13
【问题描述】:
我正在尝试将日期从两种格式强制转换为一种格式,我可以轻松地将其输入as.Date。这是一个示例:
library(dplyr)
df <- data_frame(date = c("Mar 29 2017 9:30AM", "5/4/2016"))
我试过了:
df %>%
mutate(date = gsub("([A-z]{3}) (\\d{2}) (\\d{4}).*",
paste0(which(month.abb == "\\1"),"/\\2","/\\3"), date))
但它给了我这个:
date
1 /29/2017
2 5/4/2016
但我想要这个!
date
1 3/29/2017
2 5/4/2016
看起来当我使用month.abb == "\\1" 时,它不使用捕获组输出("Mar"),它只使用调用者文本("\\1")。如果可能的话,我想在正则表达式中执行此操作。我知道你可以用另一种方式做到这一点,但你想变得圆滑。
有什么想法吗?
【问题讨论】:
-
as.Date可以采用两种格式,即as.Date(df$date, format = c('%b %d %Y %H:%M', '%m/%d/%Y'))(未经测试) -
我想用正则表达式来做。不过还是谢谢。
-
解释:正则表达式看到 paste0 表达式的结果——它永远不会看到粘贴表达式中的值。
-
啊,有道理。看起来没有办法在一行中将
"Mar"转换为3。
标签: r regex dplyr regex-group