代码之家  ›  专栏  ›  技术社区  ›  Sindhu Reddy

在R中使用strptime获取正确日期时出错

  •  0
  • Sindhu Reddy  · 技术社区  · 10 年前

    我正在使用 strptime 提取日期,结果是错误的年份 以下代码中的错误在哪里:

    strptime('8/29/2013 14:13', "%m/%d/%y") 
    [1] "2020-08-29 PDT"
    

    提取日期和时间作为单独列的其他方法有哪些。 我的数据是这种格式的- 8/29/2013 14:13 我想把它分成两列,一列是 8/29/2013 另一个是 14:13 .

    2 回复  |  直到 10 年前
        1
  •  2
  •   Richard Telford    10 年前

    您有一个四位数的年份,因此需要使用%Y

    strptime('8/29/2013 14:13', "%m/%d/%Y" )
    [1] "2013-08-29 CEST"
    

    你真的想把数据和时间分开列吗?处理单个日期时间对象通常要容易得多。

        2
  •  1
  •   RHertel    10 年前

    这里有一种从字符串中分离时间和日期的可能性。

    为了方便起见,我们可以先将字符串转换为POSIX对象:

    datetime <- '8/29/2013 14:13'
    datetime.P <- as.POSIXct(datetime, format='%m/%d/%Y %H:%M')
    

    然后我们可以使用 as.Date() 从该对象提取日期并使用 format() 以所需格式显示:

    format(as.Date(datetime.P),"%m/%d/%Y")
    #[1] "08/29/2013"
    

    要单独存储时间,我们可以使用,例如 strftime() 功能:

    strftime(datetime.P, '%H:%M')
    #[1] "14:13"
    

    最后一个函数( strftime() )不是矢量化的,这意味着如果我们处理一个矢量 datetime 包含几个字符串,其中日期和时间的格式如OP中所述,它应该被包装成一个类似于 sapply() 以从每个字符串提取时间。


    实例

    datetime <- c('8/29/2013 14:13', '9/15/2014 12:03')
    datetime.P <- as.POSIXct(datetime, format='%m/%d/%Y %H:%M')
    format(as.Date(datetime.P),"%m/%d/%Y")
    #[1] "08/29/2013" "09/15/2014"
    sapply(datetime.P, strftime, '%H:%M')
    #[1] "14:13" "12:03"
    

    希望这有帮助。