如何在儒略日的一小部分上转换 R 中的日期/时间对象?
例如,我怎样才能把这个日期:
date <- as.POSIXct('2006-12-12 12:00:00',tz='GMT')
变成这样的数字
> fjday
[1] 365.5
其中朱利安日是从 1 月 1 日开始计算的经过日。分数 0.5 表示现在是中午 12 点,因此是一天的一半。
这只是一个例子,但我的真实数据涵盖了 2006 年的所有 365 天。
如何在儒略日的一小部分上转换 R 中的日期/时间对象?
例如,我怎样才能把这个日期:
date <- as.POSIXct('2006-12-12 12:00:00',tz='GMT')
变成这样的数字
> fjday
[1] 365.5
其中朱利安日是从 1 月 1 日开始计算的经过日。分数 0.5 表示现在是中午 12 点,因此是一天的一半。
这只是一个例子,但我的真实数据涵盖了 2006 年的所有 365 天。
由于您的所有日期都来自同一年(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')))
看看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"
转换POSIX
为 julian day 的函数,上面答案的扩展,在使用前获取它。
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