2017-03-09 109 views
0

我想将日期时间转换为R/mm/dd/yyyy格式的日期。我创建的新列中的数据被截断。您可以使用下面的代码查看示例。在#6行中,期望的输出是11/16/2016,但它显示11/16/201。已创建列中的R数据被截断

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

如果您有日期值,那么您最好使用它们作为日期值,而不是使用正则表达式和子字符串。这里是一个辅助函数的数据解析成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]迫使所有行使用在空间中的第一个值中的位置。

+0

非常感谢您的解释!它现在有效。 –