9

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

4

4 回答 4

11

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

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

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

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

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

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

as.POSIXct(begin) < as.POSIXct(begin) +1
 #[1] TRUE
于 2012-01-16T17:41:45.297 回答
7

根据修改后的问题,这应该做你想做的事:

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

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

于 2016-07-19T13:21:49.063 回答
1

帮助中的示例?as.POSIX给出

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

所以对你来说

as.numeric(as.POSIXct(strptime(begin, "%Y-%m-%d %H:%M:%S")))
于 2017-07-18T06:49:56.687 回答
1

也许这也可以工作:

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

as.numeric(hms(df))

hms() 会将您的数据从一种时间格式转换为另一种格式,这将使您可以将其转换为秒。请参阅完整文档

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

于 2019-09-24T04:46:59.330 回答