2010-07-28 4 views
2

나는 plot()을 사용하는 것처럼 간단한 시계열을 그릴 때 qplot()을 사용하려고합니다. x 변수는 as.POSIXlt이고 y는 단지 연속적인 측정 값입니다. 다음은 간단한 설명과 함께 코드입니다. 이 data.frames가 다르게 작동하는 이유에 대한 도움은 매우 감사하겠습니다. 아래에서 볼 수 있듯이 문제를 해결할 수 있지만 예상대로 작동하지 않는 이유에 대해 궁금합니다.qplot()에서 동작이 불일치 할 수 있습니다.

몇 가지 세부 사항 :
플랫폼 : OS X 10.6.4
R 버전 : R 2.11.0

면책 조항 : 내가 소스 코드에 파고 자신이 알아낼 수 있다는 것을 알고 있습니다. 나는 지금까지 그렇게 사용하지 않았으며 그것이이 포럼에 좋은 주제가 될 것이라고 생각했습니다. (2)

면책 조항 : - POSIXlt 데이터 프레임에 포함 적합하지 않습니다 내가 새로 온 사람은

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

gplot() 명령과 ggplot() 명령을 사용하는 것과 동일한 동작이 발생합니까? 나는 그것이 qplot()에 특정한 것인지 또는 gplot()에서 넘겨 졌는지 궁금해서 질문합니다. –

+0

의견을 보내 주셔서 감사합니다. ggplot()에서 오류가 전달 된 것 같습니다. 예를 들어 다음과 같이 사용하면 동일한 오류가 발생합니다. ggplot (데이터 = ws.dat, 매핑 = aes (x = as.POSIXlt (tt), y = w)) + 레이어 (geom = "point") 위의 코드에서 원래 변수를 't'에서 'tt'로 변경했음을 유의하십시오. 내 부분에서 어리석은 실수 (중요하지 않습니다. 단지 부주의합니다). – rtelmore

답변

2

사용 POSIXct이 ggplot2합니다. data.frame을 사용하여 변수를 만들면 자동으로 POSIXct으로 강제 변환됩니다.

1

의심스러운 경우 전달되는 개체 클래스를 살펴보십시오! 해들리 고마워.

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