[R] merging dataframes
Gavin Simpson
gavin.simpson at ucl.ac.uk
Thu Nov 3 14:46:46 CET 2005
On Thu, 2005-11-03 at 08:33 -0500, Liaw, Andy wrote:
> The `Value' section of ?merge does say that `... in all cases the result has
> no special row names', so you're left to handle that on your own. One
> possibility is to use
>
> result <- merge(mat1, mat2, all=TRUE, sort=FALSE)
>
> so that the sorting is not done, then you can just do
>
> rownames(result) <- c(rownames(mat1), rownames(mat2))
>
> Cheers,
> Andy
Thanks Roger, Andy and Dimitris for your solutions.
I'd missed the default for sort being set to TRUE - must pay more
attention in class. Roger's and Andy's approaches seem like the most
fool-proof way of canning this into a function that does all the I asked
and a bit of tidying up of NA's etc.
Cheers,
G
>
> > From: Gavin Simpson
> >
> > Dear List,
> >
> > I often have to merge two or more data frames containing unique row
> > names but with some columns (names) common to the two data frames and
> > some columns not common. This toy example will explain the
> > kind of setup
> > I am talking about:
> >
> > mat1 <- as.data.frame(matrix(rnorm(20), nrow = 5))
> > mat2 <- as.data.frame(matrix(rnorm(20), nrow = 4))
> > rownames(mat1) <- paste("site", 1:5, sep="")
> > rownames(mat2) <- paste("site", 6:9, sep="")
> > names(mat1) <- paste("species", c(1,3,5,7), sep="")
> > names(mat2) <- paste("species", c(2,3,4,7,9), sep="")
> > mat1
> > mat2
> >
> > So sites (rows) are unique across both data frames, but there
> > are only 7
> > unique species (columns):
> >
> > unique(c(names(mat1), names(mat2)))
> >
> > merge(mat1, mat2, all = TRUE)
> >
> > gives almost what I want, but it drops or looses the rownames()
> > information from the two merged data frames, and it re-orders the rows
> > so that one simply cannot write back the correct row names.
> >
> > How might I go about merging two data frames as I have described, but
> > preserve the row names and more importantly, keep the order
> > of rows the
> > same, so that rows from mat1 come before the rows of mat2?
> >
> > Many thanks,
> >
> > Gavin
> > --
> > %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~
> > %~%~%~%~%
> > Gavin Simpson [T] +44 (0)20 7679 5522
> > ENSIS Research Fellow [F] +44 (0)20 7679 7565
> > ENSIS Ltd. & ECRC [E] gavin.simpsonATNOSPAMucl.ac.uk
> > UCL Department of Geography [W]
> > http://www.ucl.ac.uk/~ucfagls/cv/
> > 26 Bedford Way
> > [W] http://www.ucl.ac.uk/~ucfagls/
> > London. WC1H 0AP.
> > %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~
> > %~%~%~%~%
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide!
> > http://www.R-project.org/posting-guide.html
> >
> >
>
>
> ------------------------------------------------------------------------------
> Notice: This e-mail message, together with any attachment...{{dropped}}
More information about the R-help
mailing list