我的数据框有一个像这样的日期时间列
When <- c("09/13/2016 11:29:00 AM", "09/13/2016 07:20:00 AM")
df <- data.frame(When)
df$When <- as.character(df$When)
我尝试将其转换为我想要的格式
df$When <- format(strptime(df$When, "%m/%d/%Y %I:%M:%S"), "%m/%d/%Y %I:%M:%S %p")
上述内容未转换为日期时间格式。
我有一个用于检查dateformat
的函数checkDate <- function(date, dateFormat){
d <- try( as.Date( date, format = dateFormat))
if( class( d ) == "try-error" || any(is.na( d )) ){
stop( paste0("DATETIME: Need a valid DATETIME in format ", dateFormat) )
}
}
df$When <- checkDate(df$When, "%d/%m/%Y %I:%M:%S %p")
我收到错误
checkDate出错(df $ When,“%d /%m /%Y%I:%M:%S%p”): DATETIME:需要格式为%d /%m /%Y%的有效DATETIME I:%M:%S%p
我不了解如何解决这个问题。它是导致错误的字符格式吗?有人可以帮我指出正确的方向吗?
答案 0 :(得分:0)
两个小的改动,我认为它应该适合你:
L0: R
L2: A
L4: B
L6: C
L6: D
L2: E
L4: F
L6: G
L8: H
L6: I
的显式返回d
开头,而不是%m
。这给了我们:
%d
答案 1 :(得分:0)
使用lubridate(mdy_hms)提取时间戳,然后使用日期函数提取日期
> When <- c("09/13/2016 11:29:00 AM", "09/13/2016 07:20:00 AM")
> df <- data.frame(When)
> df$When <- as.character(df$When)
> df
When
1 09/13/2016 11:29:00 AM
2 09/13/2016 07:20:00 AM
> str(df)
'data.frame': 2 obs. of 1 variable:
$ When: chr "09/13/2016 11:29:00 AM" "09/13/2016 07:20:00 AM"
> library(lubridate)
Attaching package: ‘lubridate’
The following object is masked from ‘package:base’:
date
> df$When <- mdy_hms(df$When)
> df$Date=date(df$When)
> df
When Date
1 2016-09-13 11:29:00 2016-09-13
2 2016-09-13 07:20:00 2016-09-13