[R] interpolation to montly data

Gabor Grothendieck ggrothendieck at gmail.com
Sat Jun 16 22:27:02 CEST 2012


On Sat, Jun 16, 2012 at 8:19 AM, stef salvez <loggyedy at googlemail.com> wrote:
> I have a panel data set (in MS excel)  like the one below
>
>
>  1         "23/11/08"            2
> 1   "28/12/08"                   3
> 1    "25/01/09"                   4
> 1   "22/02/09"                   5
> 1    "29/03/09"                  6
> 1  "26/04/09"                   32
> 1  "24/05/09"                   23
> 1  "28/06/09"                   32
> 2   "26/10/08"                45
> 2  "23/11/08"                 46
> 2  "21/12/08"               90
> 2  "18/01/09"                54
> 2  "15/02/09"                 65
> 2   "16/03/09"               77
> 2  "12/04/09"                    7
> 2   "10/05/09"                   6
>
>
>
>
> the start and end date of the time series for countries 1 and 2 are
> different. For example, for country 1 the time series begins on
> "23/11/08" while for country 2 the time series begins on "26-10-2008”.
>
> My data on prices are available every 28 days (or equivalently every 4
> weeks). But in some cases I have jumps (35 days or 29 days instead of
> 28 days). For example from the above table we have such jumps: from
> "28/12/08" to "28/12/08" , from 22/02/09" to "29/03/09", etc
>
> My goal is to have a unified sequence of dates across countries. So,
> to achieve this I want to apply the following solutions
>
> I want  to take what I have and calculate monthly average prices and also
> report how many prices those averages are based on. I suppose that I
> will still have gaps and may well need to interpolate.
>
> Please, I would be grateful to you if you could provide the exact code
> for doing this
>
>

Here is a solution using zoo and aggregate.zoo:


# dat is from Ken's post
dat <- data.frame("country" = c(rep(1,8), rep(2, 8)),
                "date" = c("23/11/08","28/12/08","25/01/09","22/02/09",
                         "29/03/09","26/04/09","24/05/09", "28/06/09",
                         "26/10/08","23/11/08","21/12/08","18/01/09",
                         "15/02/09","16/03/09","12/04/09","10/05/09"),
                "price" = c(2,3,4,5,6,32,23,32,45,46,90,54,65,77,7,6))

library(zoo)
# split into columns by country
z <- read.zoo(dat, index = 2, format = "%d/%m/%y", split = 1)

# by month for each country
aggregate(z, format(time(z), "%m"), mean, na.rm = TRUE)

# by year and month for each country
aggregate(z, as.yearmon, mean, na.rm = TRUE)


-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-help mailing list