我有一个向量a = 40208.64507
。
在excel中,我可以通过单击日期类型自动将a
更改为日期时间:2010/1/30 15:28:54
。
我尝试了一些方法,但在R中无法获得相同的结果,就像在excel中一样。
a = 40208.64507
# in Excel, a can change into: 2010/1/30 15:28:54
as.Date(a, origin = "1899-12-30")
lubridate::as_datetime(a, origin = "1899-12-30")
有什么方法可以在R中获得与Excel中相同的结果吗
这里有几种方法。chron类在内部表示方面最接近Excel——除了原点之外,它们都是相同的——也是最简单的,所以我们先列出它。我们还展示了如何使用chron作为获取POSIXct的中间步骤。
BaseR提供了一种避免包依赖性的方法,如果您已经在使用lubridate,则可能会使用它
1(使用chron添加适当的原点以获得chron日期时间或将其转换为POSIXct。与Excel一样,chron以天和一天的小数点为单位工作,但chron使用UNIXEpoch作为原点,而Excel使用如下所示的Epoch。
library(chron)
a <- 40208.64507
# chron date/time
ch <- as.chron("1899-12-30") + a; ch
## [1] (01/30/10 15:28:54)
# POSIXct date/time in local time zone
ct <- as.POSIXct(ch); ct
## [1] "2010-01-30 10:28:54 EST"
# POSIXct date/time in UTC
as.POSIXct(format(ct), tz = "UTC")
## [1] "2010-01-30 10:28:54 UTC"
2(仅使用基R,使用指定的原点将数字转换为Date类,然后转换为POSIXct。
# POSIXct with local time zone
ct <- as.POSIXct(as.Date(a, origin = "1899-12-30")); ct
## [1] "2010-01-30 10:28:54 EST"
# POSIXct with UTC time zone
as.POSIXct(format(ct), tz = "UTC")
## [1] "2010-01-30 15:28:54 UTC"
3(使用lubrigate,它类似于碱基R,因此我们可以编写
library(lubridate)
# local time zone
as_datetime(as_date(a, origin = "1899-12-30"), tz = "")
[1] "2010-01-30 15:28:54 EST"
# UTC time zone
as_datetime(as_date(a, origin = "1899-12-30"))
[1] "2010-01-30 15:28:54 UTC"