【问题标题】:Extracting time from character string with strptime() in R, returning NA在R中使用strptime()从字符串中提取时间,返回NA
【发布时间】:2014-03-02 08:23:32
【问题描述】:

我试图从 R 中的字符串中提取时间,结果无法停止获取 NA。我已经尝试了许多正则表达式标签的变体,但似乎无法解决这个简单的问题。任何帮助/澄清表示赞赏。

这是我的示例代码:

> x
[1] "2/7/2013 7:43"
> class(x)
[1] "character"
> z <- strptime(x, "%H:%M")
> z
[1] NA

【问题讨论】:

    标签: regex r date time strptime


    【解决方案1】:

    如果您的目标是获取带有时间的字符串,您可以在sub 中使用正则表达式。如果您在没有日期信息的字符串上使用strptime,则使用今天的日期。

    x <- "2/7/2013 7:43"
    
    x2 <- sub(".* ", "", x)
    # [1] "7:43"
    
    strptime(x2, "%R")
    # [1] "2014-02-05 07:43:00"
    

    【讨论】:

    • 你能解释一下子函数中3个正则表达式项的要点吗?我对正则表达式相当陌生。感谢您的帮助!
    • @stokeinfo 看看?sub。三个参数是:模式、替换、字符串。模式.* 表示:任意数量的字符后跟一个空格。替换只是空字符串。该函数用空字符串替换空格和空格前面的所有字符。因此,只剩下表示时间的字符串。
    • 或者换句话说,sub查找模式并将其替换为“nothing”,这实际上是从字符串中删除日期并留下时间?
    • 轰隆隆。非常感谢!
    • 出于好奇,最后一件事......你将如何用同样的方法提取日期?
    【解决方案2】:

    R 不知道您的字符串是日期时间。所以先做一个:

    y <- strptime(x, format='%m/%d/%Y %H:%M')
    

    如果您只想获取日期,您可以这样做:

    strptime(x, '%m/%d/%Y') 
    

    因为strptime 会丢弃格式字符串之后的所有额外字符,但您无法获取结尾的%H:%M,因为该函数不知道从哪里开始。

    一旦它是一个合适的日期时间类,你就可以对它做一些事情:

    strftime(y, '%H:%M')
    

    我更喜欢使用as.POSIXlt 而不是strptimeformat 而不是strftime...但它们大致相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      相关资源
      最近更新 更多