[R] Convert date to continuous variable in R
MacQueen, Don
macqueen1 at llnl.gov
Fri Jul 7 00:23:15 CEST 2017
Looks good, but there are some ways in which I think you’re making it more complicated than necessary.
Two calls to plot(), with plot.new() in between, is definitely not needed.
Recalculating LAI_simulation$Date three times should not be needed.
## create example data
day0 <- as.Date('2009-10-7')
mydat <- data.frame( date=seq(day0, by=1, len=6*365) , y=runif(6*365) )
## plot
day0fmt <- format(day0, '%b %d, %Y')
daynum <- as.integer(mydat$date)
xn <- seq(0, length(daynum)+200, by=200)
plot(y ~ date, data=mydat, xaxt='n', xlab=paste('Days since',day0fmt) , ylab='My data')
axis.Date(3, mydat$date)
axis(1, at=day0+xn, lab=xn)
mtext('Year', line=2.5)
-Don
--
Don MacQueen
Lawrence Livermore National Laboratory
7000 East Ave., L-627
Livermore, CA 94550
925-423-1062
On 7/6/17, 7:42 AM, "Ahmed Attia" <ahmedatia80 at gmail.com> wrote:
Thanks it worked for me. I wanted to plot days since planting on
x-axis 1 and years on x-axis 3.
LAI_simulation$Date <- as.Date( LAI_simulation$Date, '%Y/%m/%d')
LAI_simulation$Date <- as.integer(LAI_simulation$Date - as.Date("2009-10-07"))
plot(LAI~Date,data=LAI_simulation,xlab="Days since Oct, 7,
2009",cex=0.3,cex.lab=1.2,xaxt="n",xaxs="i",yaxs="i",ylim=c(0,6))
axis(1,xlim=c(0,2200),xaxp=c(0,2200,11),cex.lab=1.2,cex.axis=0.8,xaxs="i")
LAI_simulation$Date<- as.Date(LAI_simulation$Date, origin="2009-10-07")
par(new=TRUE)
plot(LAI~Date, data=LAI_simulation,xlab="",ylab="",
xaxt="n",type="p",cex=0.2,col=1,xaxs="i",yaxs="i",ylim=c(0,6))
axis.Date(side=3, at=seq(min(LAI_simulation$Date),
max(LAI_simulation$Date),by="year"), format="%Y",
xlab="xxx",cex.axis=0.9)
mtext("years",side=3,line=3,cex.lab=1.2)
Ahmed Attia, Ph.D.
Agronomist & Soil Scientist
On Wed, Jul 5, 2017 at 4:52 PM, MacQueen, Don <macqueen1 at llnl.gov> wrote:
> Not entirely sure what you really want the axis on the top to look like, but here's what I'd be likely to do:
>
> ## note, correction to format; in your example data year comes last
> LAI_simulation$Date <- as.Date( LAI_simulation$Date, '%m/%d/%Y')
>
> plot(LAI~Date, data=LAI_simulation)
>
> simdate <- as.numeric( LAI_simulation$Date - as.Date('2009-10-7') )
> ## or
> simdate <- difftime( LAI_simulation$Date, as.Date('2009-10-7') )
>
> ## then
> axis(3, pretty(simdate) )
>
>
> Converting LAI_simulation$Date to numeric, and then applying axis.Date() to it makes no sense to me, since the elapsed numbers of days are not dates.
>
> --
> Don MacQueen
>
> Lawrence Livermore National Laboratory
> 7000 East Ave., L-627
> Livermore, CA 94550
> 925-423-1062
>
>
> On 7/5/17, 11:23 AM, "Ahmed Attia" <ahmedatia80 at gmail.com> wrote:
>
> How can I convert date to continuous variable staring from 1. I tried
> as.numeric but R starts counting from default January 1, 1970 while my data
> start Oct 7, 2009.
>
> I need to do this conversion to plot the date on two x-axes (1 and 3).
> Ex;
> Date LAI
> 10/7/2009 0
> 10/8/2009 0.004173
> 10/9/2009 0.009997
> 10/10/2009 0.009998
> 10/11/2009 0.009999
> 10/12/2009 0.009999
> 10/13/2009 0.009999
> 10/14/2009 0.009999
> 10/15/2009 0.009998
> 10/16/2009 0.009998
> 10/17/2009 0.009998
> 10/18/2009 0.009998
> 10/19/2009 0.009998
> 10/20/2009 0.009998
>
> LAI_simulation$Date <- as.Date( LAI_simulation$Date, '%Y/%m/%d')
> plot(LAI~Date, data=LAI_simulation)
> LAI_simulation$Date<- as.numeric(LAI_simulation$Date,origin="2009-10-07")
> #R does not see the origin
> axis.Date(side=3,at=LAI_simulation$Date)
>
>
>
>
> Ahmed Attia, Ph.D.
> Agronomist & Soil Scientist
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
>
More information about the R-help
mailing list