2010-07-28 13 views
2

J'essaie d'utiliser qplot() pour tracer une série temporelle simple comme on pourrait le faire en utilisant plot(). La variable x est as.POSIXlt et le y est juste une mesure continue. Voici le code avec quelques brefs commentaires. Toute aide sur le comportement différent de ces data.frames serait très appréciée. Comme vous pouvez le voir ci-dessous, je peux contourner le problème, mais je suis curieux de savoir pourquoi cela ne fonctionne pas comme je m'y attendais.Comportement peut-être incohérent dans qplot()?

Quelques détails:
plate-forme: OS X 10.6.4
Version R: R 2.11.0

Disclaimer: Je rends compte que je pouvais creuser dans le code source et comprendre cela moi-même. Je n'ai jamais utilisé SO et pensé que ce pourrait être un bon sujet pour ce forum.

Avertissement (2): Je suis nouveau ggplot2

library(ggplot2) 
ws.dat <- read.csv("~/path/to/filename.csv",header=F) 
names(ws.dat) <- c("s","t","w") 
ws.dat$new.t <- as.POSIXlt(ws.dat$t) 
ws.dat[1:5,] 
    ##  s     t w    new.t 
    ## 1 29522 2005-07-02 00:00:00 5.00 2005-07-02 00:00:00 
    ## 2 29522 2005-07-02 00:10:00 5.29 2005-07-02 00:10:00 
    ## 3 29522 2005-07-02 00:20:00 5.48 2005-07-02 00:20:00 
    ## 4 29522 2005-07-02 00:30:00 5.54 2005-07-02 00:30:00 
    ## 5 29522 2005-07-02 00:40:00 5.49 2005-07-02 00:40:00 


## the following works 
plot(as.POSIXlt(ws.dat$t), ws.dat$w) 

## doesn't work 
qplot(as.POSIXlt(t), w, data = ws.dat) 
    ## Error in if (length(range) == 1 || diff(range) == 0) { : 
    ## missing value where TRUE/FALSE needed 

## doesn't work 
ws.dat$new.t <- as.POSIXlt(ws.dat$t) 
qplot(new.t, w, data = ws.dat) 
    ## Same error as above 

## Note - I could find a more elegant way of doing this; I'm just trying 
## to reproduce as fast as possible. 
new.df <- data.frame(ws.dat$new.t, ws.dat$w) 
new.df[1:5,] 
    ##   ws.dat.new.t ws.dat.w 
    ## 1 2005-07-02 00:00:00  5.00 
    ## 2 2005-07-02 00:10:00  5.29 
    ## 3 2005-07-02 00:20:00  5.48 
    ## 4 2005-07-02 00:30:00  5.54 
    ## 5 2005-07-02 00:40:00  5.49 

## 'works as *I* would expect'; this is != 'works *as* expected' 
qplot(ws.dat.new.t, ws.dat.w, data = new.df) 
+0

avez-vous le même comportement avec les commandes ggplot() que vous le faites avec qplot()? Je demande parce que je me demande si elle est spécifique à qplot() ou reportée de ggplot(). –

+0

Merci pour vos commentaires. Il semble que l'erreur soit transmise par ggplot(). Par exemple, j'obtiens la même erreur si j'utilise: ggplot (data = ws.dat, mapping = aes (x = as.POSIXlt (tt), y = w)) + couche (geom = "point") Notez que j'ai changé ma variable d'origine dans le code ci-dessus de 't' à 'tt' ... erreur stupide de ma part (peu importe, juste bâclée). – rtelmore

Répondre

2

utilisation POSIXct - POSIXlt ne convient pas à inclure dans des trames de données. Lorsque vous utilisez data.frame pour créer la variable, il est automatiquement forcé à POSIXct.

1

En cas de doute, regardez la classe des objets qui passent! Merci Hadley.

class(new.df$ws.dat.new.t) 
## [1] "POSIXt" "POSIXct" <--- ct!!!! 
class(as.POSIXlt(ws.dat$tt)) 
## [1] "POSIXt" "POSIXlt" <--- lt!!!!