[R] Compare two dataframes
Michael Bedward
michael.bedward at gmail.com
Fri Dec 17 00:56:44 CET 2010
Hello Mark,
This is how I do it but it's longer than your code :)
unique.rows <- function (df1, df2) {
# Returns any rows of df1 that are not in df2
out <- NULL
for (i in 1:nrow(df1)) {
found <- FALSE
for (j in 1:nrow(df2)) {
if (all(df1[i,] == df2[j,])) {
found <- TRUE
break
}
}
if (!found) out <- rbind(out, df1[i,])
}
out
}
Michael
On 17 December 2010 06:02, Mark Na <mtb954 at gmail.com> wrote:
> Hello,
>
> I have two dataframes DF1 and DF2 that should be identical but are not
> (DF1 has some rows that aren't in DF2, and vice versa). I would like
> to produce a new dataframe DF3 containing rows in DF1 that aren't in
> DF2 (and similarly DF4 would contain rows in DF2 that aren't in DF1).
>
> I have a solution for this problem (see self contained example below)
> but it's awkward and requires making a new "ID" column by pasting
> together all of the columns in each DF and them comparing the two DFs
> based on this unique ID.
>
> Is there a better way?
>
> Many thanks for your help,
>
> Mark
>
>
>
> #compare two dataframes and extract uncommon rows
>
> #MAKE SOME DATA
> cars$id<-paste(cars$speed,cars$dist,sep="") $create unique ID field by
> pasting all columns together
> cars1<-cars[1:35,]
> cars2<-cars[16:50,]
>
> #EXTRACT UNIQUE ROWS
> cars1_unique<-cars1[cars1$id %in% setdiff(cars1$id,cars2$id),] #rows
> unique to cars1 (i.e., not in cars2)
> cars2_unique<-cars2[cars2$id %in% setdiff(cars2$id,cars1$id),] #rows
> unique to cars2
>
> ______________________________________________
> 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