[R] Match 2 vectors

Kang Min ngokangmin at gmail.com
Fri May 28 12:11:18 CEST 2010


That's what I wanted, thanks!!


On May 28, 5:13 pm, Dennis Murphy <djmu... at gmail.com> wrote:
> Hi:
>
> On Thu, May 27, 2010 at 10:26 PM, Kang Min <ngokang... at gmail.com> wrote:
> > Hi,
>
> > I have 2 dataframes of unequal length, and I would like to match a
> > factor to them so that both dataframes will have the same number of
> > rows.
>
> > example:
> > # create the 2 dataframes with unequal length
> > data1 <- data.frame(letters, 1:26)[-c(5,10,19:21),]
> > data2 <- data.frame(letters, 1:26)[-c(6,9,15:18),]
>
> If this is your real problem, then an easy thing to do is
>
>     data1 <- data2 <- data.frame(letters[1:26])
>     data1[c(5,10,19:21), ] <- NA
>     data2[c(6, 9, 15:18), ] <- NA
>     data3 <- cbind(data1, data2)
>     names(data3, c('lett1', 'lett2'))
>     data3
>
> However, I suspect this is not your real problem, so let's add a variable to
> each of the data frames you posted and try again:
>
> data1 <- data.frame(letters, 1:26)[-c(5,10,19:21),]
> data2 <- data.frame(letters, 1:26)[-c(6,9,15:18),]
>
> data1$x <- rpois(nrow(data1), 10)
> data2$y <- rpois(nrow(data2), 5)
>
> # Now merge data1 and data2:
> (data3 <- merge(data1, data2, all = TRUE))
>
>    letters X1.26  x  y
> 1        a     1  7  1
> 2        b     2 13  3
> 3        c     3 10  5
> 4        d     4  4  9
> 5        e     5 NA  4
> 6        f     6 10 NA
> 7        g     7 15  4
> 8        h     8 10  6
> 9        i     9 12 NA
> 10       j    10 NA  3
> 11       k    11  8  6
> 12       l    12 12  3
> 13       m    13 10  3
> 14       n    14  7  8
> 15       o    15  6 NA
> 16       p    16  8 NA
> 17       q    17  6 NA
> 18       r    18  4 NA
> 19       s    19 NA  2
> 20       t    20 NA  6
> 21       u    21 NA  4
> 22       v    22 12  6
> 23       w    23 10  3
> 24       x    24  7  8
> 25       y    25  9  6
> 26       z    26 15  7
>
> To get rid of the second column, set data3[, 2] <- NULL.
>
> HTH,
> Dennis
>
>
>
>
>
> > data2a <- match(data1[,1], data2[,1])
> > data2b <- data2[data2a,]
>
> > When I match data1 to data2, and combine the data2a vector to the
> > original data2, I'm still missing some rows. I need to get the 26
> > rows, and preferably with the first column displaying all the levels.
> > In data2b the mismatches show up as NA in the whole row.
>
> > Thanks.
> > Kang Min
>
> > ______________________________________________
> > R-h... 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.
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-h... at r-project.org mailing listhttps://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list