我想在R中以mm / dd / yyyy格式将datetime转换为日期。我创建的新列中的数据被截断。您可以使用以下代码查看示例。在第6行中,所需的输出是11/16/2016,但它显示为11/16/201。
library(dplyr)
a <- c("2/23/2017 4:45", "2/15/2017 21:46", "2/10/2017 4:20",
"2/9/2017 7:19", "2/7/2017 3:23", "11/16/2016 0:58")
test <- as.data.frame(a)
test %>% mutate(new = substr(a, 1, regexpr(" ",a)[1]-1))
答案 0 :(得分:0)
如果您有日期值,那么最好将它们作为日期值使用,而不是使用正则表达式和子字符串。这是一个帮助函数,用于将数据解析为dplyr友好格式
parsect <- function(x, f="%m/%d/%Y %H:%M") {
as.POSIXct(strptime(x, f))
}
然后你可以做
test %>% mutate(new = strftime(parsect(a), "%Y-%m-%d"))
parsect()
会将值转换为正确的日期/时间值,然后您可以使用基本strftime()
函数格式化该日期/时间。
虽然看起来您的方法在没有[1]
部分的情况下有效,因为regexpr()
已经过矢量化。
test %>% mutate(new = substr(a, 1, regexpr(" ",a)-1))
[1]
强制所有行使用在第一个值中找到空格的位置。