2011-09-12 8 views
2

私は月ごとの値を含むRのデータセットを持っています。しかし、いくつかの月が欠落しています。たとえば:時事通信の月が計算されない

"2001-09-01"、 "2001-10-01"、 "2001-12-01" には、 "2002-02-01"

2001年11月には、不足していると2002年1月には欠けています。これらの月を時系列に含めるにはどうすればいいですか?

ありがとうございます!あなたがdata.frameにデータを持っていると仮定すると

+0

データオブジェクトの構造。 '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 
) 

あなたは、あなたが必要とするすべての日付を持つ単一の列を含む第2 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"のクラス時間のシリーズとして表現するのが理にかなっています。最初の数行は、テストデータを設定し、最後の2行は、実際の充填操作を行います。

# 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))

これもでRコマンドvignette("zoo-faq")経由またはネット上で利用できる動物園に関するFAQの質問13のいくつかの例を挙げて議論されることに注意してください:あなたが提供する場合は、より多くの有益な答えを受け取ることになります

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

関連する問題