【问题标题】:Converting time format to numeric with R使用R将时间格式转换为数字
【发布时间】:2012-01-16 17:06:11
【问题描述】:

在大多数情况下,我们使用 R 将数字时间转换为 POSIXct 格式。但是,如果我们想比较两个时间点,那么我们更喜欢数字时间格式。例如,我有一个日期格式,如“2001-03-13 10:31:00”,

  begin <- "2001-03-13 10:31:00"

使用 R,我想将其转换为数字(例如儒略时间),可能类似于 1970-01-01 00:00:00 和 2001-03-13 10:31:00 之间经过的秒数.

你有什么建议吗?


儒略历始于公元前 45 年(AUC 709 年),是 Julius Caesar 对罗马历法的改革。它是在咨询了亚历山大的天文学家索西吉内斯之后选择的,它可能被设计为近似热带年(至少从喜帕恰斯开始就知道了)。见http://en.wikipedia.org/wiki/Julian_calendar

【问题讨论】:

  • 我没有投反对票,但我怀疑这是因为您的输入和输出之间的粗心不匹配。您似乎可能希望只删除字符类型向量中的标点符号并且您想要:20010313103100 可能是一个数值,但目前还不清楚。
  • 您的回复很有帮助。我会修改问题。
  • 一般来说,as.numeric 是一个不错的首选位置,如果您想将某些内容转换为数字。你试过吗?
  • 好提醒。谢谢你。

标签: r time numeric strptime posixct


【解决方案1】:

如果您只想从字符向量中删除 ":" 、 " " 和 "-",那么这就足够了:

end <- gsub("[: -]", "" , begin, perl=TRUE)
#> end
#[1] "20010313103100"

您应该阅读?regex 中关于字符类的大约1/4 的部分。由于“-”在该上下文中作为范围运算符是特殊的,因此需要放在首位或最后。

在您编辑之后,答案显然是@joran 写的,除了您需要先转换为 DateTime 类:

 as.numeric(as.POSIXct(begin))
#[1] 984497460

要说明的另一点是比较运算符 do 适用于 Date 和 DateTime 类变量,因此可能根本不需要转换。这会将“开始”与一秒后的时间进行比较,并正确报告开始时间较早:

as.POSIXct(begin) < as.POSIXct(begin) +1
 #[1] TRUE

【讨论】:

  • 或更一般的gsub("[^[:digit:]]", "", begin) 将删除除数字以外的任何内容。
【解决方案2】:

根据修改后的问题,这应该可以满足您的要求:

begin <- "2001-03-13 10:31:00"
as.numeric(as.POSIXct(begin))

结果是一个unix时间戳,即自纪元以来的秒数,假设时间戳在本地时区。

【讨论】:

    【解决方案3】:

    来自?as.POSIX帮助的例子

    as.POSIXct(strptime(begin, "%Y-%m-%d %H:%M:%S"))
    

    所以对你来说是

    as.numeric(as.POSIXct(strptime(begin, "%Y-%m-%d %H:%M:%S")))
    

    【讨论】:

      【解决方案4】:

      也许这也可行:

      library(lubridate)
      ...
      df <- '24:00:00'
      
      as.numeric(hms(df))
      

      hms() 会将您的数据从一种时间格式转换为另一种格式,这将使您可以将其转换为秒。查看全文documentation

      我尝试了这个,因为我在处理该格式但超过 24 小时的数据时遇到了问题。

      【讨论】:

        猜你喜欢
        • 2015-03-18
        • 1970-01-01
        • 1970-01-01
        • 2014-08-21
        • 1970-01-01
        • 2017-12-08
        • 1970-01-01
        • 2019-03-15
        • 1970-01-01
        相关资源
        最近更新 更多