Fra*_*ang 6 time r numeric strptime posixct
在大多数情况下,我们使用R将数字时间转换为posixct格式.但是,有时,我们想比较哪个时间点更早,然后我们更喜欢数字时间格式.因此,将时间格式转换为数字是非常实际的问题.例如,我的数据格式如"2001-03-13 10:31:00",
begin <- "2001-03-13 10:31:00"
Run Code Online (Sandbox Code Playgroud)
使用R,我想弄清楚如何将其转换为数字,例如Julian时间,类似于1970-01-01 00:00:00和2001-03-13 10:31:00之间的秒数.
你有什么建议吗?
朱利安历法开始于公元前45年(70年代AUC),作为朱利叶斯·凯撒对罗马历法的改革.它是在与亚历山大的天文学家Sosigenes协商后选择的,可能是为了接近热带年份(至少从Hipparchus开始就已知).见http://en.wikipedia.org/wiki/Julian_calendar
如果你想从字符向量中删除":",""和" - ",那么这就足够了:
end <- gsub("[: -]", "" , begin, perl=TRUE)
#> end
#[1] "20010313103100"
Run Code Online (Sandbox Code Playgroud)
关于字符类,你应该阅读关于正则表达式的1/4的部分.由于" - "在该上下文中作为范围运算符是特殊的,因此需要将其放在第一个或最后一个.
在编辑之后,答案显然是@joran写的,除了你需要先转换为DateTime类:
as.numeric(as.POSIXct(begin))
#[1] 984497460
Run Code Online (Sandbox Code Playgroud)
另一个要点是比较运算符确实适用于Date和DateTime分类变量,因此根本不需要转换.这将"开始"与一秒钟后的时间进行比较,并正确报告开始时间较早:
as.POSIXct(begin) < as.POSIXct(begin) +1
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)
小智 5
根据修改后的问题,这应该做您想要的:
begin <- "2001-03-13 10:31:00"
as.numeric(as.POSIXct(begin))
Run Code Online (Sandbox Code Playgroud)
结果为unix时间戳,即从纪元以来的秒数(假设时间戳位于本地时区中)。