2011-09-12 4 views
2

월별 값이 포함 된 데이터 집합 R이 있습니다. 그러나 몇 달이 빠져 있습니다. 예를 들어 :시계열에서 월 누락 컴퓨팅

"2001년 9월 1일" "2001년 10월 1일" "2001년 12월 1일"는 "2002년 2월 1일"

년 11 월 2001없는 얀 2002이 없습니다. 해당 월을 시계열에 포함시키고 값을 0으로 추가하려면 어떻게합니까?

감사합니다. 당신이 data.frame에 데이터가 있다고 가정

+0

: 이것은 또한 R 명령 vignette("zoo-faq")를 통해 또는 인터넷에서 사용할 수있는 동물원 자주 묻는 질문의 자주 묻는 질문 (13)에 몇 가지 예제와 함께 설명되어

주 구조. 'dput (head (mydata, 10)) '의 출력을 제공하십시오. –

답변

2

dat1 전화 :

dat1 <- data.frame(
    date = as.Date(c("2001-09-01", "2001-10-01", "2001-12-01", "2002-02-01")), 
    val = 1:4 
) 

당신은 당신이 필요로하는 모든 날짜가 하나의 열을 포함하는 두 번째 data.frame을 만들 수 있습니다. 이 순서를 만들 seq.Date를 사용

dat2 <- data.frame(
    date = seq(as.Date("2001-09-01"), by="1 month", length.out=7) 
) 

는 그 다음 간단한 merge 작업입니다 :

merge(dat1, dat2, all=TRUE) 
     date val 
1 2001-09-01 1 
2 2001-10-01 2 
3 2001-11-01 NA 
4 2001-12-01 3 
5 2002-01-01 NA 
6 2002-02-01 4 
7 2002-03-01 NA 

누락 된 값이 NA 그러나 당신은 당신이 원하는 경우, 0을 설정하는 부분 집합을 사용할 수 있습니다.

4

월간 시리즈이므로 "yearmon" 클래스 시간으로 시리즈로 표시하는 것이 좋습니다. 처음 몇 줄은 테스트 데이터를 설정하고 마지막 두 줄은 실제 충전 할 :

# set up input data as a zoo series 
library(zoo) 
d <- c("2001-09-01", "2001-10-01", "2001-12-01", "2002-02-01") 
z <- zoo(1:4, as.yearmon(d)) 

# merge with zero width series 
g <- seq(start(z), end(z), 1/12) 
zz <- merge(z, zoo(, g), fill = 0) 

"ts" 시리즈가 필요한 경우 as.ts(zz)를 사용하거나 "Date" 클래스의 시간이 동물원 시리즈가 원하는 경우 다음 시도를 : time(zz) <- as.Date(time(zz)). 당신이를 제공하는 경우 당신은 더 유용한 응답을받을 것입니다

http://cran.r-project.org/web/packages/zoo/vignettes/zoo-faq.pdf