2011-08-26 5 views
7

Estoy tratando de trazar algunas calificaciones que estoy sacando de una fuente externa. El formato de fecha se presenta en este aspecto:Error de ggplot2 datos de fecha de trazado - valor faltante donde TRUE/FALSE necesitaba

2011-08-23T17:07:05 

Así que analizarlo con strptime(date, "%FT%X") y obtener un POSIXlt. Termino con una trama de datos completa que tiene este aspecto:

    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 

con la siguiente estructura:

'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 ... 

Cuando intento para trazar estos datos:

> 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' Sé lo que estoy haciendo mal aquí. Lo reduje al manejo de la fecha al hacer esto:

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

... pero ¿cómo hago el manejo de la fecha correctamente?

Respuesta

12

Solamente los tiempos de clase POSIXct se admiten en ggplot2. La clase POSIXct representa el número (firmado) de segundos desde el comienzo de 1970 (en la zona horaria UTC) como un vector numérico. La clase POSIXlt es una lista nombrada de vectores que representan nueve elementos (sec, min, hour, etc.).

Usted puede usar la siguiente:

grades$date <- as.POSIXct(grades$date) 
+0

Je, que registró casi lo mismo en casi el mismo tiempo que yo. Sin embargo, te agradezco mucho por tu esfuerzo. :) – Dustin

+0

sí, solo 39 segundos :) – rcs

+1

+1 Por explicar esto tan claramente. Es la primera vez que entiendo la diferencia. ¡Si esto fuera así de claro en los archivos de ayuda! (Y tal vez lo es, simplemente no lo he encontrado aún). – Andrie

2

Creo que lo he descubierto. La diferencia está en entender POSIXct contra POSIXlt. POSIXlt es el tiempo del calendario en partes. POSIXct es el número de segundos desde la época. strptime devuelve un `POSIXct

Para poder utilizar estos datos, lo que necesito para convertir las marcas de tiempo:

grades$date <- as.POSIXct(grades$date) 
Cuestiones relacionadas