R 中带小数的 Julian 日期到日历日期

Julian date to calendar date in R with decimals

我有一个 Julian 日期格式的数据框:

2455764.833333
2455764.875000
2455764.916667
dput <- structure(list(date = structure(c(2L, 1L, 1L, 1L, 1L), .Label = c("", 
"2011-07-21T20:00:00"), class = "factor"), longitude = structure(c(1L, 
1L, 1L, 1L, 1L), .Label = "-6.396", class = "factor"), latitude = structure(c(1L, 
1L, 1L, 1L, 1L), .Label = "56.6283", class = "factor"), julian = structure(1:5, .Label = c("2455764.833333", 
"2455764.875000", "2455764.916667", "2455764.958333", "2455765.000000"
), class = "factor"), record_no = 1:5, temp = structure(c(1L, 
3L, 2L, 4L, 5L), .Label = c("12.414", "12.463", "12.515", "12.618", 
"12.767"), class = "factor"), depth = structure(c(1L, 1L, 1L, 
1L, 1L), .Label = "  34.00", class = "factor")), row.names = c(NA, 
5L), class = "data.frame")

在线 Julian 日期转换器可以正确转换(以上是 2011 年 7 月 22 日)- 但除了日期之外,我还需要小数点后的详细信息中的时间元素。

起源于公元前 4713 年 1 月 1 日。我读到 as.Date 不处理 BC 日期。如果我将 $julian 转换为数字,它会删除小数点后的数据。

我已经尝试了这里的各种建议,但没有找到任何适用于 BC 原点和时间元素的建议。

tiree$date2 <- as.Date(tiree$julian, origin = structure(-2440588, class = "Date"))

from 给我 charToDate(x) 中的错误:字符串不是标准的明确格式(编辑:根据转换为数字的建议,错误已删除但输出不正确)。

欢迎任何建议 - 我想我可能遗漏了一些明显的东西!

非常感谢

您有因子数据,需要convert properly to numeric

此外 origin 似乎也不正确。我们不会提前几天(as.Date 使用)并且必须考虑 as.POSIXlt 使用的秒数(参见评论中的讨论)。

dat <- transform(dat, 
                 ## date version
                 julian2=as.Date(as.numeric(levels(julian))[julian], 
                                 origin=structure(-2440588, class = "Date")),
                 ## date-time version
                 julian3=as.POSIXlt(as.numeric(levels(julian))[julian]*86400, 
                                    origin=structure(-210866760000, 
                                                     class=c("POSIXct", "POSIXt"),
                                                     tzone="GMT"),
                                    tz="GMT"))

结果

dat[c("julian", "julian2", "julian3")]  ## relevant columns selected
#           julian    julian2             julian3
# 1 2455764.833333 2011-07-21 2011-07-22 07:59:59
# 2 2455764.875000 2011-07-21 2011-07-22 09:00:00
# 3 2455764.916667 2011-07-21 2011-07-22 10:00:00
# 4 2455764.958333 2011-07-21 2011-07-22 10:59:59
# 5 2455765.000000 2011-07-22 2011-07-22 12:00:00