微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

儒略日期到R中的日历日期,带小数

如何解决儒略日期到R中的日历日期,带小数

我有一个朱利安日期格式的数据框:

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

在线朱利安日期转换器可以正确转换(对于上述日期,它是2011年7月22日)-但除了日期之外,我还需要小数点后的时间元素。

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

我从此处尝试了各种建议,但没有找到任何与BC起源和时间元素有关的建议。

tiree$date2 <- as.Date(tiree$julian,origin = structure(-2440588,class = "Date"))
来自Convert Julian Date to Date - R

给我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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。