2016-11-17 114 views
0

我有一些从1996年到2014年的日期,我需要将其转换为儒略日。下面是一个示例数据:R将日期转换为循环中的Julian日期

date<- c("21-Jul", "14-Jul", "08-Jul", "08-Jul","16-Jul","22-Jul", "10-Jul", "02-Jul", "06-Jul","18-Jul","24-Jul", "15-Jul", "03-Jul", "04-Jul","19-Jul") 
year<-rep(1996:1998,each=5) 
dat<-as.data.frame(cbind(date,year)) 
dat$date<-as.character(dat$date) 

对于每一年,我想将日期转换为Julian日,即一年中的某一天。我用下面的函数从这个链接:

Convert date without year into Julian day (number of days since start of the year)

对于闰年(如1996年),我可以在我的日期到儒略日转换为以下几点:

julian(as.Date(paste0("1996-", ds$DS), format="%Y-%d-%b"), origin=as.Date("1996-01-01"))+1 

对于非闰年(1997例),我可以把日期转换为儒略日为:

julian(as.Date(paste0("1997-", ds$DS), format="%Y-%d-%b"), origin=as.Date("1997-01-01")) 

现在,我要为1996年期间这样做在一个循环中,以2014年我这样做:

install.packages("lubridate") # function for detecting leap year 
library("lubridate") 
years <- 1996:2014 
leap<-years[leap_year(years)] 

for(i in 1996:2014){ 
if(i %in% leap){ 
    julian(as.Date(paste0(i,"-", ds$DS), format="%Y-%d-%b"), origin=as.Date(i,"-01-01"))+1 
} else { 
    julian(as.Date(paste0(i,"-", ds$DS), format="%Y-%d-%b"), origin=as.Date(i,"-01-01")) 
}} 

Error in charToDate(x) : 
character string is not in a standard unambiguous format 

我觉得错误发生是因为paste0(i,"-", ds$DS)和这个origin=as.Date(i,"-01-01"))。有谁知道如何解决它?

+0

可能'origin = as.Date(paste0(i,“-01-01”))'? – ytk

+0

是的,这个工程。谢谢 – user53020

+0

可能的重复[将年份转换为Julian日(自今年年初以来的天数)](http://stackoverflow.com/questions/40656488/convert-date-without-year-into-julian-day -n-of-days-since-start-the-the-yea) – nrussell

回答

1

为什么不简单地使用POSIXlt类,其中包含自今年年初以来的Julian日作为其组件之一?

as.POSIXlt(as.Date(paste(dat$year, dat$date, sep = "-"), 
     "%Y-%d-%b"))$yday 
#[1] 202 195 189 189 197 202 190 182 186 198 204 195 183 184 199 
+0

是的,我可以使用它,但我仍然需要分离出飞跃,现在闰年并在命令的末尾添加“+ 1”闰年? – user53020

+0

您的示例data.frame中的每个日期都有一年。这个答案自动处理闰年。如果你需要加1,我不能告诉你。该文件说'yday:0-365:一年中的一天'决定自己,如果你宁愿更喜欢1-366。 – Roland

相关问题