2

如何在儒略日的一小部分上转换 R 中的日期/时间对象?

例如,我怎样才能把这个日期:

date <- as.POSIXct('2006-12-12 12:00:00',tz='GMT')

变成这样的数字

> fjday
[1] 365.5

其中朱利安日是从 1 月 1 日开始计算的经过日。分数 0.5 表示现在是中午 12 点,因此是一天的一半。

这只是一个例子,但我的真实数据涵盖了 2006 年的所有 365 天。

4

3 回答 3

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')))
于 2014-12-21T22:07:00.873 回答
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"
于 2014-12-21T22:25:20.310 回答
2

转换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
于 2016-07-12T00:31:41.953 回答