[R] A list of data.frames merged together
Gabor Grothendieck
ggrothendieck at gmail.com
Tue Mar 9 17:35:56 CET 2010
This will do it:
> merge(A, B, by = 1, all = TRUE)
Date Value.x Value.y
1 03/15/10 1 5
2 04/15/10 2 5
3 05/15/10 3 NA
4 06/15/10 NA 5
but you probably really want to be using time series for this so that
you can easily perform other operations too. See ?merge.zoo and the
three zoo vignettes for more.
> library(zoo)
> library(chron)
> za <- zoo(A$Value, chron(as.character(A$Date)))
> zb <- zoo(B$Value, chron(as.character(B$Date)))
> merge(za, zb)
za zb
03/15/10 1 5
04/15/10 2 5
05/15/10 3 NA
06/15/10 NA 5
> zm <- merge(za, zb)
> # convert to data frame
> cbind(Date = time(zm), as.data.frame(zm))
Date za zb
03/15/10 03/15/10 1 5
04/15/10 04/15/10 2 5
05/15/10 05/15/10 3 NA
06/15/10 06/15/10 NA 5
> # handle more than two at a time
> merge(za, za2 = za, zb)
za za2 zb
03/15/10 1 1 5
04/15/10 2 2 5
05/15/10 3 3 NA
06/15/10 NA NA 5
> # same but series are in a list
> do.call(merge, list(za = za, za2 = za, zb = zb))
za za2 zb
03/15/10 1 1 5
04/15/10 2 2 5
05/15/10 3 3 NA
06/15/10 NA NA 5
On Tue, Mar 9, 2010 at 11:21 AM, Daniel Brewer <daniel.brewer at icr.ac.uk> wrote:
> Hello,
>
> I have for a long list of data.frames that I would like to get merged.
> Each data.frame have two columns with the same names (Date and Value).
> What I would like is for the objects in the list to be merged on Only
> date with the column header being the name in the list.
>
> For example
>
> A <- data.frame(Date=c("03/15/10","04/15/10","05/15/10"),
> Value=c(1,2,3))
> B <- data.frame(Date=c("03/15/10","04/15/10","06/15/10"),
> Value=c(5,5,5))
> ...
>
> yoda <- list(A=A,B=B,...)
>
> Result:
>
> Date A B C
> 03/15/10 1 5 ...
> 04/15/10 2 5
> 05/15/10 3 NA
> 06/15/10 NA 5
>
> Any ideas? I have been fiddling around with plyr and reshape without success
>
> Thanks
>
> Dan
>
> --
> **************************************************************
>
> Daniel Brewer, Ph.D.
>
> Institute of Cancer Research
> Molecular Carcinogenesis
> MUCRC
> 15 Cotswold Road
> Sutton, Surrey SM2 5NG
> United Kingdom
>
> Tel: +44 (0) 20 8722 4109
>
> **************************************************************
>
> The Institute of Cancer Research: Royal Cancer Hospital, a charitable Company Limited by Guarantee, Registered in England under Company No. 534147 with its Registered Office at 123 Old Brompton Road, London SW7 3RP.
>
> This e-mail message is confidential and for use by the a...{{dropped:2}}
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
More information about the R-help
mailing list