Hi,
With two data sets, one complete and another one partial, I would like to
merge them and keep the unmatched lines. The problem is that merge() dosen't
keep the unmatched lines. Is there another function that I could use to
merge the data frames.
Example:
completedf <- expand.grid(alpha=letters[1:3],beta=1:3)
partdf <- data.frame(
alpha= c('a','a','c'),
beta = c(1,3,2),
val = c(2,6,4))
mergedf <- merge(x=completedf, y=partdf,
by=c('alpha','beta'))
# it only kept the common rows
nrow(mergedf)
Thanks,
Etienne
--
View this message in context:
http://www.nabble.com/Merge-data-frame-and-keep-unmatched-tp23962874p23962874.html
Sent from the R help mailing list archive at Nabble.com.
On Jun 10, 2009, at 8:56 AM, Etienne B. Racine wrote:> > Hi, > > With two data sets, one complete and another one partial, I would > like to > merge them and keep the unmatched lines. The problem is that merge() > dosen't > keep the unmatched lines. Is there another function that I could use > to > merge the data frames. > > Example: > > completedf <- expand.grid(alpha=letters[1:3],beta=1:3) > partdf <- data.frame( > alpha= c('a','a','c'), > beta = c(1,3,2), > val = c(2,6,4)) > > mergedf <- merge(x=completedf, y=partdf, by=c('alpha','beta')) > # it only kept the common rows > nrow(mergedf) > > Thanks, > EtienneIs this what you want? > merge(x=completedf, y=partdf, by=c('alpha','beta'), all = TRUE) alpha beta val 1 a 1 2 2 a 2 NA 3 a 3 6 4 b 1 NA 5 b 2 NA 6 b 3 NA 7 c 1 NA 8 c 2 4 9 c 3 NA Note the 'all', 'all.x' and 'all.y' arguments... HTH, Marc Schwartz
Try:
merge(completedf, partdf, all.x = TRUE)
or
library(sqldf) # see http://sqldf.googlecode.com
sqldf("select * from completedf left join partdf using(beta, alpha)")
On Wed, Jun 10, 2009 at 9:56 AM, Etienne B. Racine<etiennebr at gmail.com>
wrote:>
> Hi,
>
> With two data sets, one complete and another one partial, I would like to
> merge them and keep the unmatched lines. The problem is that merge()
dosen't
> keep the unmatched lines. Is there another function that I could use to
> merge the data frames.
>
> Example:
>
> completedf <- expand.grid(alpha=letters[1:3],beta=1:3)
> partdf <- data.frame(
> ? ? ? ?alpha= c('a','a','c'),
> ? ? ? ?beta = c(1,3,2),
> ? ? ? ?val = c(2,6,4))
>
> mergedf <- merge(x=completedf, y=partdf,
by=c('alpha','beta'))
> # it only kept the common rows
> nrow(mergedf)
>
> Thanks,
> Etienne
> --
> View this message in context:
http://www.nabble.com/Merge-data-frame-and-keep-unmatched-tp23962874p23962874.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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.
>
Reasonably Related Threads
- R help: Batch read files based on names in a list
- utils::install.packages with quiet=TRUE fails for source packages on Windows
- utils::install.packages with quiet=TRUE fails for source packages on Windows
- Finding unmatched data between two dataframe using several factors
- [Bug 87543] New: "unmatched output device 0x0103010201010100" when connecting to hdmi