2016-11-17 104 views
0

我有一些日期需要转换为儒略日。这是数据我有将年份转换为Julian日(自今年年初以来的天数)

date <- c("21-Jul", "14-Jul", "08-Jul", "08-Jul","16-Jul") 
class(date) 

[1] "character" 

我想date转换为儒略日。因此,对于上述日期,朱利安天将:

date 
202,195,189,189,197 

我发现了一个功能as.POSIXlt该转换日期为儒略日。对于例如

tmp <- as.POSIXlt("16Jun10", format = "%d%b%y") 
tmp$yday 
# [1] 166 

但是,这需要日期在一个特定的顺序,包括我没有的一年。有什么办法可以将我的日期是字符,而且没有年份呢转换成朱利安?

另外,今年不是闰年。

儒略日暗示今年这样1月1日这一天是1,1月2日是2,依此类推....

+0

Julian天意味着今年的一天,所以1月1日是1,2月1日是2等等...... – user53020

+0

哦,是的。感谢您指出。 – user53020

+1

如果你不知道这一年,那么你不知道今年是不是闰年,所以Julian日不可确定(至少在二月之后)。 –

回答

3

基础R具有功能julian可以产生你与paste0一起找什么和as.Date

julian(as.Date(paste0("1970-", date), format="%Y-%d-%b")) 
[1] 201 194 188 188 196 
attr(,"origin") 
[1] "1970-01-01" 

请注意,这是从1970年1月1日开始的天数(从0开始),因此您可以加1以获得所需的结果。

julian(as.Date(paste0("1970-", date), format="%Y-%d-%b")) + 1 
[1] 202 195 189 189 197 

我手动检查了1970年是不是闰年:

seq(as.Date("1970-02-25"), as.Date("1970-03-02"), by="day") 
[1] "1970-02-25" "1970-02-26" "1970-02-27" "1970-02-28" "1970-03-01" "1970-03-02" 

以供将来参考,也可以设置起点本身,使用的由来参数as.Date

julian(as.Date(paste0("1980-", date), format="%Y-%d-%b"), origin=as.Date("1980-01-01")) 
[1] 202 195 189 189 197 
attr(,"origin") 
[1] "1980-01-01" 

应该清楚,原点可以设置为您希望的任何日期,以便这可以用于计算任何日期之后(或之前)的天数。

相关问题