10

日付列を持つ data.frame があります。これらの日付は何度も発生する可能性がありますが、0 回発生することもあります。

        date value
1 2013-01-01     5
2 2013-01-01     3
3 2013-01-03     3
4 2013-01-04     3
5 2013-01-04     1
6 2013-01-06     1

この data.frame の日付ギャップを埋めるにはどうすればよいですか?

        date value
1 2013-01-01     5
2 2013-01-01     3
3 2013-01-02     0
4 2013-01-03     3
5 2013-01-04     3 
6 2013-01-04     1
7 2013-01-05     0
8 2013-01-06     1

どんな助けでも大歓迎です。

ティア、ジェリー

4

1 に答える 1

16

mergeすべての日付を順番に含む別の data.frame を使用して data.frame を作成できます。ここで、da が元の data.frame であると仮定します。

hh<- data.frame(date=seq(as.Date("2013-01-01"), as.Date("2013-01-6"), by="days"))
>res <- merge(dat,hh,by.x='date',by.y='date',all.x=T,all.y=T)
        date value
1 2013-01-01     5
2 2013-01-01     3
3 2013-01-02    NA
4 2013-01-03     3
5 2013-01-04     3
6 2013-01-04     1
7 2013-01-05    NA
8 2013-01-06     1

これで、hh に一致する行がない dat の各行に対して NA が得られました。個人的には、これらが欠損値であると言うためにNAを持っている方が良いと思いますが、それらを0に設定することができます:

res$value[is.na(res$value)] <- 0

編集

一般性のために、@Arun ソリューションに示すように hh を生成できます。

      hh <- seq(min(dat$date), max(dat$date), by="days")
于 2013-01-20T12:56:54.323 に答える