Error from ggplot2 date data - missing value where TRUE / FALSE is required

I am trying to build some estimates that I draw from an external source. The date format is as follows:

2011-08-23T17:07:05 

So, I parse it with strptime(date, "%FT%X") and get a POSIXlt . I get a full data frame that looks like this:

  date subject grade 1 2011-08-23 17:07:05 AP Biology 95.83 2 2011-08-24 17:07:03 AP Biology 95.83 3 2011-08-25 17:08:27 AP Biology 95.83 4 2011-08-17 17:05:54 US History 157.14 5 2011-08-18 17:05:24 US History 157.14 6 2011-08-19 17:05:35 US History 157.14 7 2011-08-22 17:06:25 US History 157.14 8 2011-08-23 17:07:05 US History 157.14 9 2011-08-24 17:07:03 US History 157.14 10 2011-08-25 17:08:27 US History 157.14 11 2011-08-19 17:05:35 Yearbook 0.00 12 2011-08-22 17:06:25 Yearbook 0.00 13 2011-08-23 17:07:05 Yearbook 100.00 14 2011-08-24 17:07:03 Yearbook 100.00 15 2011-08-25 17:08:27 Yearbook 100.00 

With the following structure:

 'data.frame': 15 obs. of 3 variables: $ date : POSIXlt, format: "2011-08-23 17:07:05" "2011-08-24 17:07:03" ... $ subject: Factor w/ 3 levels "AP Biology","US History",..: 1 1 1 2 2 2 2 ... $ grade : num 95.8 95.8 95.8 157.1 157.1 ... 

When I try to build this data:

 > ggplot(data=grades, aes(date, grade, factor=subject)) + geom_line() Error in if (length(range) == 1 || diff(range) == 0) { : missing value where TRUE/FALSE needed 

I don't know what I'm doing wrong here. I narrowed it down to date processing by doing the following:

 ggplot(data=grades, aes(seq(length(grades[,1])), grade, color=subject)) + geom_line() 

... but how to handle the date?

+7
source share
2 answers

In ggplot2, only POSIXct class times are POSIXct . The POSIXct class represents the (signed) number of seconds since the beginning of 1970 (in the UTC time zone) as a numerical vector. The POSIXlt class is a named list of vectors representing nine elements ( sec , min , hour , etc.).

You can use the following:

 grades$date <- as.POSIXct(grades$date) 
+12
source

I think I get it. The difference is in understanding POSIXct vs. POSIXlt . POSIXlt is a piecemeal calendar time. POSIXct - the number of seconds from the moment. strptime returns `POSIXct

To use this data, I need to convert the timestamps:

 grades$date <- as.POSIXct(grades$date) 
+2
source

All Articles