在大多数情况下,我们使用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
答案 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小时的数据。