Merging Data

Adding Columns

To merge two data frames (datasets) horizontally,  use the merge function. In most cases, you join two data frames  by one or more common key variables (i.e., an inner join).

# merge two data frames by ID   
total <- merge(data frameA,data frameB,by="ID") #by指定的列中的值必须是唯一的,不能重复出现两行有相同的ID
# merge two data frames by ID and Country   
total <- merge(data frameA,data frameB,by=c("ID","Country"))

 

Inner join: merge(df1, df2) will work for these examples because R automatically joins the frames by common variable names, but you would most likely want to specify merge(df1, df2, by="CustomerId")

Outer join: merge(x = df1, y = df2, by = "CustomerId", all = TRUE) #by指定的列中的值必须是唯一的,不能重复出现两行有相同的ID

Left outer: merge(x = df1, y = df2, by = "CustomerId", all.x=TRUE) #by指定的列中的值必须是唯一的,不能重复出现两行有相同的ID

Right outer: merge(x = df1, y = df2, by = "CustomerId", all.y=TRUE) #by指定的列中的值必须是唯一的,不能重复出现两行有相同的ID

Cross join: merge(x = df1, y = df2, by = NULL) #by指定的列中的值必须是唯一的,不能重复出现两行有相同的ID

 

 

#########################

> df2 = data.frame(CustomerId=c(2,4,6),State=c(rep("Alabama",2),rep("Ohio",1))) 
> df1  
CustomerId Product
1          1 Toaster
2          2 Toaster
3          3 Toaster
4          4   Radio
5          5   Radio
6          6   Radio
> df2  
CustomerId   State
1          2 Alabama
2          4 Alabama
3          6    Ohio
> merge(df1, df2, all=TRUE)  
CustomerId Product   State
1          1 Toaster    <NA>
2          2 Toaster Alabama
3          3 Toaster    <NA>
4          4   Radio Alabama
5          5   Radio    <NA>
6          6   Radio    Ohio
> merge(df1, df2, all.x=TRUE)  
CustomerId Product   State
1          1 Toaster    <NA>
2          2 Toaster Alabama
3          3 Toaster    <NA>
4          4   Radio Alabama
5          5   Radio    <NA>
6          6   Radio    Ohio
> merge(df1, df2, all.y=TRUE)  
CustomerId Product   State
1          2 Toaster Alabama
2          4   Radio Alabama
3          6   Radio    Ohio

#####################################

de <-(d,,=0,=TRUE)# merge by row names

 

REF:

http://stat.ethz.ch/R-manual/R-devel/library/base/html/merge.html

http://www.statmethods.net/management/merging.html

http://stackoverflow.com/questions/1299871/how-to-join-data-frames-in-r-inner-outer-left-right

http://blog.sciencenet.cn/blog-508298-652589.html