49

我从 SQL 查询中导入了一个带有日期的 CSV 文件,但这些日期实际上是日期时间值,R 似乎没有将它们识别为日期:

> mydate
[1] 1/15/2006 0:00:00
2373 Levels: 1/1/2006 0:00:00 1/1/2007 0:00:00 1/1/2008 0:00:00 ... 9/9/2012 0:00:00
> class(mydate)
[1] "factor"
> as.Date(mydate)
Error in charToDate(x) : 
  character string is not in a standard unambiguous format

如何转换mydate为日期格式?(我不需要包括时间部分。)

4

3 回答 3

60

你很亲密。 format=需要添加到as.Date调用中:

mydate <- factor("1/15/2006 0:00:00")
as.Date(mydate, format = "%m/%d/%Y")
## [1] "2006-01-15"
于 2013-07-05T21:46:12.897 回答
12

你可以试试 lubridate 包,它让生活更轻松

library(lubridate)

mdy_hms(mydate)

以上将日期格式更改为POSIXct

一个示例工作示例:

> data <- "1/15/2006 01:15:00"
> library(lubridate)
> mydate <- mdy_hms(data)
> mydate
[1] "2006-01-15 01:15:00 UTC"
> class(mydate)
[1] "POSIXct" "POSIXt" 

对于带有因子的情况,使用 as.character

data <- factor("1/15/2006 01:15:00")
library(lubridate)
mydate <- mdy_hms(as.character(data))
于 2013-07-05T20:25:13.177 回答
5

看看里面的格式?strptime

R> foo <-  factor("1/15/2006 0:00:00")
R> foo <- as.Date(foo, format = "%m/%d/%Y %H:%M:%S")                                           
R> foo                                                                                       
 [1] "2006-01-15"                                                                             
R> class(foo)                                                                                
 [1] "Date"  

请注意,即使foo从角色开始,这也将起作用。as.POSIXlt如果使用其他日期格式( , ),它也可以工作as.POSIXct

于 2013-07-05T20:26:11.130 回答