Hello,
The following seems to do the trick.
x1 <-
structure(list(State_prov = c("Nova Scotia", "Nova Scotia", "Nova Scotia"
), Shape_name = c("Annapolis", "Antigonish", "Gly"), bob2009 = c(0L,
0L, NA), bob2010 = c(0L, 0L, NA), bob2011 = c(1L, 0L, NA)), .Names =
c("State_prov",
"Shape_name", "bob2009", "bob2010", "bob2011"), class = "data.frame",
row.names = c(NA,
-3L))
x2 <-
structure(list(FID = 0:2, State_prov = c("Nova Scotia", "Nova Scotia",
"Nova Scotia"), Shape_name = c("Annapolis", "Antigonish", "Gly"
), bob2009 = c(0L, 0L, 0L), bob2010 = c(0L, 0L, 0L), coy2009 = c(10L,
1L, 1L)), .Names = c("FID", "State_prov", "Shape_name", "bob2009",
"bob2010", "coy2009"), class = "data.frame", row.names = c(NA,
-3L))
x3 <- merge(x1, x2, all.y = TRUE)
Note also that since by = intersect(names(x1), names(x2)), you really
don't need it, it's the default behavior.
Hope this helps,
Rui Barradas
Em 26-04-2013 18:10, Catarina Ferreira escreveu:
Dear all,
I'm trying to merge 2 dataframes, but I'm not being entirely successful
and
I can't understand why.
Dataframe x1
State_prov Shape_name bob2009 bob 2010 bob2011
Nova Scotia Annapolis 0 0 1
Nova Scotia Antigonish 0 0 0
Nova Scotia Gly NA NA NA
Dataframe x2 - has 20000 rows and 193 variables, contains one important
field which is "FID" that is a link to a shapefile (this is not in x1) and
shares common columns with x1, like this:
FID State_prov Shape_name bob2009 bob 2010 coy 2009
0 Nova Scotia Annapolis 0
0 10
1 Nova Scotia Antigonish 0
0 1
2 Nova Scotia Gly 0
0 1
So when I do
x3 <- merge(x1, x2, by=intersect(names(x1), names(x2)), all=TRUE)
it should do the trick. The thing is that it works for the columns (it
adds
all the new columns not common to both dataframes), but it also adds the
rows. This is what I get (x3):
FID State_prov Shape_name bob2009 bob 2010 coy 2009 bob2011
0 Nova Scotia Annapolis 0
0 10 NA
NA Nova Scotia Annapolis NA NA NA
1
1 Nova Scotia Antigonish 0
0 1 NA
NA Nova Scotia Antigonish NA NA NA
0
2 Nova Scotia Gly 0
0 1 NA
NA Nova Scotia Gly NA NA
NA NA
What I want to get is a true merge, like this:
FID State_prov Shape_name bob2009 bob 2010 coy 2009 bob2011
0 Nova Scotia Annapolis 0
0 10 1
1 Nova Scotia Antigonish 0
0 1 0
2 Nova Scotia Gly 0
0 1 NA
Can anybody please help me to understand what I'm doing wrong.
Any help will be much appreciated!!