字符向量的日期时间错误

时间:2017-06-15 20:54:43

标签: r datetime

我的数据框有一个像这样的日期时间列

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

我不了解如何解决这个问题。它是导致错误的字符格式吗?有人可以帮我指出正确的方向吗?

2 个答案:

答案 0 :(得分:0)

两个小的改动,我认为它应该适合你:

  1. 在您的函数中添加L0: R L2: A L4: B L6: C L6: D L2: E L4: F L6: G L8: H L6: I 的显式返回
  2. 将您的格式更改为以d开头,而不是%m
  3. 这给了我们:

    %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