使用R将时间格式转换为数字

时间:2012-01-16 17:06:12

标签: r time numeric strptime posixct

在大多数情况下,我们使用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年(70年代AUC),作为朱利叶斯·凯撒对罗马历法的改革。它是在与亚历山大的天文学家Sosigenes协商后选择的,可能是为了接近热带年份(至少从Hipparchus开始就已知)。见http://en.wikipedia.org/wiki/Julian_calendar

4 个答案:

答案 0 :(得分:8)

如果你想从字符向量中删除“:”,“”和“ - ”,那么这就足够了:

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

你应该阅读关于字符类的1/4向下的部分。由于“ - ”在该上下文中作为范围运算符是特殊的,因此需要将其放在第一位或最后一位。

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

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

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

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

答案 1 :(得分:4)

根据修订后的问题,这应该做你想要的:

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

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

答案 2 :(得分:0)

?as.POSIX帮助中的示例提供了

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

所以对你来说就是

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

答案 3 :(得分:0)

也许这也可以:

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

as.numeric(hms(df))

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

之所以尝试此操作,是因为我无法处理那种格式但超过24小时的数据。