Estoy trabajando con datos, 1 de dos columnas son las fechas, 3ª columna es símbolo, y 4 y 5 columnas son los precios.
Así, he creado un subconjunto de los datos de la siguiente manera:

test.sub<-subset(test,V3=="GOOG",select=c(V1,V4)

y luego trato de trazar un gráfico de series de tiempo utilizando la siguiente

as.ts(test.sub)
plot(test.sub)

bien, me da un diagrama de dispersión – no es lo que estaba buscando.
así, traté de plot(test.sub[1],test.sub[2])
y ahora me sale el siguiente error:

Error in xy.coords(x, y, xlabel, ylabel, log) : 
  'x' and 'y' lengths differ

Para asegurarse de que el no. de filas mismo, me encontré con nrow(test.sub[1]) y nrow(test.sub[2]) y ambos vuelven igualdad de filas, así como un recién llegado a la R, no estoy seguro de lo que es la corrección.

También corrí plot.ts(test.sub) y que funciona, pero no me muestran las fechas en el eje de las x, que se estaba haciendo con plot(test.sub) y que es lo que me gustaría ver.

test.sub[1]
              V1
1107 2011-Aug-24
1206 2011-Aug-25
1307 2011-Aug-26
1408 2011-Aug-29
1510 2011-Aug-30
1613 2011-Aug-31
1718 2011-Sep-01
1823 2011-Sep-02
1929 2011-Sep-06
2035 2011-Sep-07
2143 2011-Sep-08
2251 2011-Sep-09
2359 2011-Sep-13
2470 2011-Sep-14
2581 2011-Sep-15
2692 2011-Sep-16
2785 2011-Sep-19
2869 2011-Sep-20
2965 2011-Sep-21
3062 2011-Sep-22
3160 2011-Sep-23
3258 2011-Sep-26
3356 2011-Sep-27
3455 2011-Sep-28
3555 2011-Sep-29
3655 2011-Sep-30
3755 2011-Oct-03
3856 2011-Oct-04
3957 2011-Oct-05
4059 2011-Oct-06
4164 2011-Oct-07
4269 2011-Oct-10
4374 2011-Oct-11
4479 2011-Oct-12
4584 2011-Oct-13
4689 2011-Oct-14

str(test.sub)
'data.frame':   35 obs. of  2 variables:
 $ V1:Class 'Date'  num [1:35] NA NA NA NA NA NA NA NA NA NA ...
 $ V4: num  0.475 0.452 0.423 0.418 0.403 ...

head(test.sub) V1 V4 
1212 <NA> 0.474697 
1313 <NA> 0.451907 
1414 <NA> 0.423184 
1516 <NA> 0.417709 
1620 <NA> 0.402966 
1725 <NA> 0.414264 

Ahora de que esto es así, me gustaría añadir una 3ª variable para trazar un gráfico 3d – alguna sugerencia de cómo puedo hacerlo. thx!

¿Qué tipo de trama que estás buscando, exactamente?
sólo una línea gráfica con el eje x muestra las fechas en la 1ª columna y el eje y muestra los precios en la 4ª columna
A continuación, sólo hacer plot(test.sub,type="l").
aún se me pone la dispersión de puntos con plot(test.sub).
también, como un principiante, estoy dispuesto a entender por qué tengo la Error in xy.coords cuando el número de filas de las columnas son los mismos

OriginalEl autor itcplpl | 2011-10-17

3 Comentarios

  1. 14

    Así que creo que hay algunas cosas que vale la pena hablar, a través de:

    primer lugar, algunos datos de ejemplo:

    test <- data.frame(End = Sys.Date()+1:5, 
                   Start = Sys.Date()+0:4, 
                   tck = rep("GOOG",5), 
                   EndP= 1:5, 
                   StartP= 0:4)
    
    test.sub = subset(test, tck=="GOOG",select = c(End, EndP))

    Primer lugar, tenga en cuenta que prueba y prueba.sub son tanto las tramas de datos, por lo que las llamadas como test.sub[1] realmente no «significa» nada a R.** Es más R-ish a escribir test.sub[,1] por la virtud de la coherencia con otras R estructuras. Si se comparan los resultados de str(test.sub[1]) y str(test.sub[,1]) verás que R los trata de forma ligeramente diferente.

    Usted dijo que usted escribió:

    as.ts(test.sub)
    plot(test.sub)

    Me imagino que tienen una amplia experiencia con algún tipo de OO-lenguaje; y mientras que R tiene algunos OO sabor a ello, no se aplican aquí. En lugar de la transformación de la prueba.sub a algo de la clase ts, esto solo lo hace la transformación y se tira a la basura, luego se traslada a la trama la trama de datos con el que comenzó. Es una solución fácil, sin embargo:

    test.sub.ts <- as.ts(test.sub)
    plot(test.sub.ts)

    Pero, esto probablemente no es lo que estabas buscando. Más bien, R, crea una serie de tiempo que tiene dos variables llamadas «Final» (que es la fecha en que ahora los obliga a un número entero) y «EndP». Negocio gracioso como esto es parte de la razón por la serie de tiempo de los paquetes como el zoológico y xts se han puesto así que voy a detallarlas en lugar de un poco más abajo.

    (Por desgracia, a mi entender, R no mantener a los sellos de fecha con su valor predeterminado ts clase, eligiendo en su lugar para mantener las fechas de inicio y finalización, así como de la frecuencia. Para obtener más general de la serie de tiempo de trabajo, esto rara vez es lo suficientemente flexible)

    Quizás podría conseguir lo que quería escribiendo

    plot(test.sub[,1], test.sub[,2]) 

    lugar de

    plot(test.sub[1], test.sub[2])

    ya que el primero se ejecuta en problemas, dado que se pasa de dos sub-tramas de datos en lugar de los dos vectores (aunque parece que sería).*

    De todos modos, con xts (y lo mismo para el zoológico):

    library(xts) # You may need to install this
    xtemp <- xts(test.sub[,2], test.sub[,1]) # Create the xts object
    plot(xtemp) 
    # Dispatches a xts plot method which does all sorts of nice time series things

    Esperanza de que algunos de esta ayuda y lo siento por la línea de código que no es identificado como tal: todavía tiene que acostumbrarse a desbordamiento de pila.

    Michael

    ** * * * En realidad, para acceder a las listas que se utilizan para la estructura de una trama de datos internamente, pero eso es más un código de matices que algo que vale la pena confiar en.

    ***El meollo de la cuestión es que cuando se pasa plot(test.sub[1], test.sub[2]) a R, se distribuye el método plot.data.frame que toma un único marco de datos y trata de interpretar el segundo marco de datos como un adicional de parcela parámetro que se obtiene de malinterpretado manera en algún lugar abajo de la línea, dando su error.

    gracias por la explicación – de hecho, es muy útil. se topó con un problema con la xts. Me encontré con el siguiente xtemp<-xts(test.sub[,2],test.sub[,1]) Error in xts(test.sub[, 2], test.sub[, 1]) : order.by requires an appropriate time-based object he comprobado test.sub[1] y muestra las fechas en el formato ‘yyyy-mmm-dd’, así que es un momento de objetos basado…he perdido algo
    Si muestra las fechas como «aaaa-mm-dd» no es necesariamente un momento de objetos basado en: dependiendo de su origen de datos, puede ser simplemente un personaje que para usted es, obviamente, una fecha, pero R no sabe que. Una Fecha es un tipo de datos especial para R…Trate de envolver la prueba.sub[,1] con como.Fecha() que toma un opcional formato= argumento si tu no seguir la norma. Para usted, suena como.Fecha(de prueba.sub[,1], format = «AAAA-mm-dd») va a trabajar.
    trató de que, pero no hubo suerte, esto es lo que devuelve – as.Date(test.sub[,1],format="YYYY-mm-dd") [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA [26] NA NA NA NA NA NA NA NA NA NA NA. esta es una muestra de mis datos de prueba.sub 4689 2011-Oct-14 0.2460010 7.18000 1.000000 con la fecha de la V1
    Creo mweylandt acabo de dar el formato correcto para el argumento de formato (ironía!). Trate de format = '%Y-%m-%d' lugar.
    que devuelve NA, así 🙁 esto es lo que tengo as.Date(test.sub[,1],format='%Y-%m-%d') [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA [26] NA NA NA NA NA NA NA NA NA NA NA

    OriginalEl autor mweylandt

  2. 2

    La razón por la que obtiene el Error acerca de las diferentes x y y longitudes es inmediatamente evidente si hacemos un rastreo inmediatamente después de levantar el error:

    > plot(test.sub[1],test.sub[2])
    Error in xy.coords(x, y, xlabel, ylabel, log) : 
      'x' and 'y' lengths differ
    > traceback()
    6: stop("'x' and 'y' lengths differ")
    5: xy.coords(x, y, xlabel, ylabel, log)
    4: plot.default(x1, ...)
    3: plot(x1, ...)
    2: plot.data.frame(test.sub[1], test.sub[2])
    1: plot(test.sub[1], test.sub[2])

    Los problemas en su llamada son múltiples. En primer lugar, como se ha mencionado por @mweylandt test.sub[1] es una estructura de datos con el único componente de un vector compuesto de los contenidos de la primera componente de test.sub.

    De la traza, vemos que la plot.data.frame método fue llamado. R es muy feliz para trazar un marco de datos como el tiempo que tiene al menos dos columnas. R tomó en tu palabra y pasa test.sub[1] (como datos.frame) en plot()test.sub[2] nunca consigue una mirada en. test.sub[1] se pasa finalmente a xy.coords() que correctamente le informa de que tiene un montón de filas para x pero 0 filas para y porque test.sub[1] contiene un solo componente.

    Hubiera funcionado si había hecho plot(test.sub[,1], test.sub[,2], type = "l") o se utiliza la fórmula de la interfaz a nombre de las variables plot(V4 ~ V1, data = test.sub, type = "l") como muestro en mi otra Respuesta.

    OriginalEl autor Gavin Simpson

  3. 1

    Seguramente es más fácil utilizar la fórmula de la interfaz:

    > test <- data.frame(End = Sys.Date()+1:5, 
    +                Start = Sys.Date()+0:4, 
    +                tck = rep("GOOG",5), 
    +                EndP= 1:5, 
    +                StartP= 0:4)
    > 
    > test.sub = subset(test, tck=="GOOG",select = c(End, EndP))
    > head(test.sub)
             End EndP
    1 2011-10-19    1
    2 2011-10-20    2
    3 2011-10-21    3
    4 2011-10-22    4
    5 2011-10-23    5
    > plot(EndP ~ End, data = test.sub, type = "l")

    Yo trabajo mucho con la serie de tiempo del tipo de datos y rara vez, si alguna vez tiene alguna necesidad de la "ts" clase de objetos. Paquetes de zoológico y xts son muy útiles, pero si todo lo que quiero hacer es graficar los datos, i) obtener la información de fecha y hora con el formato correcto/set-up como un "Date" o "POSIXt" clase de objeto y, a continuación, ii) sólo la trama es el uso de gráficos estándar y type = "l" (o type = "b" o type = "o" si usted desea ver los tiempos de observación).

    gracias por el ejemplo, que es muy útil. mi problema ahora es con la obtención de la Fecha objeto de la clase para que funcione correctamente. No se pueden utilizar las Sys.Date() como estoy tratando con datos históricos. He publicado el error que estoy recibiendo con Fecha..una sugerencia en la solución sería muy útil
    Cómo sobre usted mostrar nosotros lo que su fecha de datos? Si usted me muestra el formato que yo voy a mostrar cómo convertir eso en algo de R puede leer.
    suena bien. Acabo de actualizar el post original con los datos de fecha
    test.sub <- within(test.sub, V1 <- as.Date(V1, format = "Y%-%b-%d")) debe hacerlo. Ver ?strftime para los detalles de los códigos de formato.
    gracias por el puntero en strftime. que poco trabajado, pero cuando me encontré con la trama, me da un error…esto es lo que me encontré test.sub<-within(test.sub, V1<-as.Date(V1, format = "%Y-%b-%d")) > xtemp<-xts(test.sub[,2],test.sub[,1]) > plot(xtemp) Error in if (on == "years") { : missing value where TRUE/FALSE needed

    OriginalEl autor Gavin Simpson

Dejar respuesta

Please enter your comment!
Please enter your name here