Hi All, I found a solution that give the correct answer..
year <- c(2100:2110) x1 <- c(F,T,T,F,F,F,T,F,T,T,F) df1 <- data.frame(cbind(year, x1)) df1$subject <- c(1,1,1,2,2,3,3,3,3,4,4) df1$match <- 1 df1$key <- paste(df1$subject, df1$match, sep="") ; df1 df2 <- data.frame(cbind(year, x1)) df2$subject <- c(1:11) df2$match <- 1 df2$key <- paste(df2$subject, df2$match, sep="") ; df2 nomatch <- subset(df2, is.element(df2[,"key"], df1[,"key"])==FALSE); nomatch rm(list=ls()) Pele wrote: > > Hi R users, > > I am trying to compare 2 data frames by subject and match and save the no > matches to an object called nomatch, but I am getting unexpected > results... Can anyone tell me how to correct the code to get the expected > results shown in the last table? > > Many thanks in advance for your any help! > > library("reshape") > > year <- c(2100:2110) > x1 <- c(F,T,T,F,F,F,T,F,T,T,F) > df1 <- data.frame(cbind(year, x1)) > df1$subject <- c(1,1,1,2,2,3,3,3,3,4,4) > df1$match <- 1; df1 > > df2 <- data.frame(cbind(year, x1)) > df2$subject <- c(1:11) > df2$match <- 1; df2 > key <- c("subject", "match") > > nomatch <- subset(df2, is.element(df2[,key], df1[,key])==FALSE); nomatch > rm(list=ls()) > > Unexpected Results > year x1 subject match > 1 2100 0 1 1 > 3 2102 1 3 1 > 5 2104 0 5 1 > 7 2106 1 7 1 > 9 2108 1 9 1 > 11 2110 0 11 1 > > > Results I expected > > year x1 subject match > 5 2104 0 5 1 > 6 2105 0 6 1 > 7 2106 1 7 1 > 8 2107 0 8 1 > 9 2108 1 9 1 > 10 2109 1 10 1 > 11 2110 0 11 1 > > -- View this message in context: http://www.nabble.com/Comparing-data-frames-and-keeping-non-matches-tp22460451p22464615.html Sent from the R help mailing list archive at Nabble.com. ______________________________________________ R-help@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.