2010-07-23 22 views
9

Ho dati a un numero di giorni da un evento. Questi dati sono campionati in modo irregolare - i miei punti di tempo sono come 0, 5, 6, 10, 104 giorni. Non ho informazioni specifiche sulla data-ora, cioè non ho idea di quando nella vita reale si è verificato l'evento che sto studiando.R + ggplot: tracciatura delle serie temporali irregolari

Mi piacerebbe tracciare, utilizzando ggplot, le mie serie temporali. Posso utilizzare, dire

p <- ggplot(data,aes(x=time,y=expression)) 
p <- p + geom_point() 

ma naturalmente le variabili x assi vengono tracciati accanto all'altro, in modo che la distanza tra t = 10 e t = 104 è uguale a t = 5 e t = 6 . Così posso fare qualcosa in su come

start <- ISOdate(2001, 1, 1, tz = "") 
data$time <- start + data$time*60*60*12 

che quasi funziona, ma ora le zecche sul mio ascisse sono terribilmente i tempi di data imprecisi. Potrei riformattarli forse? Ma non riesco comunque a vedere il formato "giorni dall'inizio". E ormai sono stato in giro per un po ', con la fastidiosa sensazione che mi manchi qualcosa di molto ovvio. Sono io?

risposta

4

Suona come la variabile time è un fattore o forse un vettore di carattere, non è un valore numerico! Se lo fai data$time <- as.numeric(data$time) potrebbe risolvere il tuo problema.

ggplot è abbastanza bravo a utilizzare il giusto tipo di scala per il giusto tipo di dati. (Purtroppo, le routine di importazione dei dati in R in genere sono meno intelligenti ...)

+1

che dovrebbe essere 'as.numeric (as.character (data $ time))', o 'as.numeric (livelli (data $ time) [data $ time])'. Le pagine di aiuto dicono che il secondo è un po 'più veloce. – JoFrhwld

+0

a destra, se è un fattore. Se è già un vettore di caratteri, che potrebbe dare un risultato simile, allora non hai bisogno della conversione interiore. – Harlan

+0

Sono sicuro che il tempo inizia come un normale vettore numerico, poi una volta che l'ho aggiunto a "start" è un vettore datetime o qualcosa del genere. –

9

Non sicuro se questo è quello che stai cercando (vedi this related question). È possibile riformattare l'asse e gestire l'irregolarità utilizzando le funzioni scale_x. Per esempio:

p <- qplot(1:3, 1:3, geom='line') 
p + scale_x_continuous("", breaks=1:3, 
     labels = as.Date(c("2010-06-03", "2010-06-04", "2010-06-07"))) 

Per inciso, ecco una funzione che ho creato per il tracciato multivariate zoo oggetti:

qplot.zoo <- function(x) { 
    if(all(class(x) != "zoo")) stop("x must be a zoo object") 
    x.df <- data.frame(dates=index(x), coredata(x)) 
    x.df <- melt(x.df, id="dates", variable="value") 
    ggplot(x.df, aes(x=dates, y=value, group=value, colour=value)) + geom_line() + opts(legend.position = "none") 
} 
+0

Grazie! anche se si è scoperto che la mia stupidità da parte mia era la colpa. Cos'è un oggetto zoo? –

+0

@Mike: 'zoo' è probabilmente la classe di serie storica con intervalli irregolari più popolare in R: http://cran.r-project.org/web/packages/zoo/index.html – Shane

+0

impressionante. Non mi sono ancora avvicinato alle classi di serie storiche di R. Sto lavorando su serie temporali di espressione genica al momento, che hanno forse 6 o 7 punti di tempo nel migliore dei casi! Non sono ancora necessarie classi dedicate (al di fuori di ExpressionSet di Bioconductor)! –

Problemi correlati