如何将J中的日期/时间对象转换为朱利安日的分数?
例如,如何更改此日期:
date <- as.POSIXct('2006-12-12 12:00:00',tz='GMT')
成为这样的数字
> fjday
[1] 365.5
从1月1日算起的朱利安日。分数0.5表示它是下午12点,因此是一天中的一半。
这只是一个例子,但我的真实数据涵盖了2006年的所有365天。
答案 0 :(得分:4)
由于您的所有日期都来自同一年(2006年),因此这应该非常简单:
julian(date, origin = as.POSIXct('2006-01-01', tz = 'GMT'))
如果您或其他读者碰巧将您的数据集扩展到其他年份,那么您可以按如下方式设置每年年初的原点:
sapply(date, function(x) julian(x, origin = as.POSIXct(paste0(format(x, "%Y"),'-01-01'), tz = 'GMT')))
答案 1 :(得分:2)
查看difftime
功能:
> unclass(difftime('2006-12-12 12:00:00', '2006-01-01 00:00:00', tz="GMT", units = "days"))
[1] 345.5
attr(,"units")
[1] "days"
答案 2 :(得分:1)
将POSIX
转换为朱利安日的功能,是上述答案的延伸,在使用之前将其来源。
julian_conv <- function(x) {
if (is.na(x)) { # Because julian() cannot accept NA values
return(NA)
}
else {
j <-julian(x, origin = as.POSIXlt(paste0(format(x, "%Y"),'-01-01')))
temp <- unclass(j) # To unclass the object julian day to extract julian day
return(temp[1] + 1) # Because Julian day 1 is 1 e.g., 2016-01-01
}
}
示例:
date <- as.POSIXct('2006-12-12 12:00:00')
julian_conv(date)
#[1] 345.5