This tutorial defines Julian (year) day as most often used in an ecological context, explains why Julian days are useful for analysis and plotting, and teaches how to create a Julian day variable from a Date or Data/Time class variable.
After completing this tutorial, you will be able to:
- Define a Julian day (year day) as used in most ecological contexts.
- Convert a Date or Date/Time class variable to a Julian day variable.
Things You’ll Need To Complete This Tutorial
You will need the most current version of R and, preferably, RStudio loaded on your computer to complete this tutorial.
Install R Packages
More on Packages in R – Adapted from Software Carpentry.
The data used in this lesson were collected at the National Ecological Observatory Network's Harvard Forest field site. These data are proxy data for what will be available for 30 years on the NEON data portal for the Harvard Forest and other field sites located across the United States.
Set Working Directory: This lesson assumes that you have set your working directory to the location of the downloaded and unzipped data subsets.
R Script & Challenge Code: NEON data lessons often contain challenges that reinforce learned skills. If available, the code for challenge solutions is found in the downloadable R script of the entire lesson, available in the footer of each lesson page.
Convert Between Time Formats - Julian Days
Julian days, as most often used in an ecological context, is a continuous count of the number of days beginning at Jan 1 each year. Thus each year will have up to 365 (non-leap year) or 366 (leap year) days.
Data Note: This format can also be called ordinal day or year day. In some contexts, Julian day can refer specifically to a numeric day count since 1 January 4713 BCE or as a count from some other origin day, instead of an annual count of 365 or 366 days.
Including a Julian day variable in your dataset can be very useful when comparing data across years, when plotting data, and when matching your data with other types of data that include Julian day.
Load the Data
Load this dataset that we will use to convert a date into a year day or Julian day.
Notice the date is read in as a character and must first be converted to a Date class.
# Load packages required for entire script library(lubridate) #work with dates # set working directory to ensure R can find the file we wish to import wd <- "~/Documents/" # Load csv file of daily meteorological data from Harvard Forest # Factors=FALSE so strings, series of letters/ words/ numerals, remain characters harMet_DailyNoJD <- read.csv( file=paste0(wd,"NEON-DS-Met-Time-Series/HARV/FisherTower-Met/hf001-06-daily-m-NoJD.csv"), stringsAsFactors = FALSE ) ## Warning in file(file, "rt"): cannot open file '/Users/olearyd/Documents/ ## NEON-DS-Met-Time-Series/HARV/FisherTower-Met/hf001-06-daily-m-NoJD.csv': ## No such file or directory ## Error in file(file, "rt"): cannot open the connection # what data class is the date column? str(harMet_DailyNoJD$date) ## Error in str(harMet_DailyNoJD$date): object 'harMet_DailyNoJD' not found # convert "date" from chr to a Date class and specify current date format harMet_DailyNoJD$date<- as.Date(harMet_DailyNoJD$date, "%m/%d/%y") ## Error in as.Date(harMet_DailyNoJD$date, "%m/%d/%y"): object 'harMet_DailyNoJD' not found
Convert with yday()
To quickly convert from from Date to Julian days, can we use
function from the
# to learn more about it type ?yday
We want to create a new column in the existing data frame, titled
contains the Julian day data.
# convert with yday into a new column "julian" harMet_DailyNoJD$julian <- yday(harMet_DailyNoJD$date) ## Error in yday(harMet_DailyNoJD$date): object 'harMet_DailyNoJD' not found # make sure it worked all the way through. head(harMet_DailyNoJD$julian) ## Error in h(simpleError(msg, call)): error in evaluating the argument 'x' in selecting a method for function 'head': object 'harMet_DailyNoJD' not found tail(harMet_DailyNoJD$julian) ## Error in h(simpleError(msg, call)): error in evaluating the argument 'x' in selecting a method for function 'tail': object 'harMet_DailyNoJD' not found
Data Tip: In this tutorial we converted from
Date class to a Julian day, however, you can convert between any recognized
date/time class (POSIXct, POSIXlt, etc) and Julian day using
Get Lesson Code
If you have questions or comments on this content, please contact us.Contact Us