web-dev-qa-db-fra.com

Comment combiner deux trames de données basées sur deux colonnes?

Je sais que je peux utiliser la variable plyr et ses amis pour combiner des images, ainsi que merge, mais je ne sais pas comment fusionner deux images avec plusieurs colonnes basées sur deux colonnes?

84
Sam

Voir la documentation sur ?merge, qui dit:

By default the data frames are merged on the columns with names they both have, 
 but separate specifications of the columns can be given by by.x and by.y.

Cela implique clairement que merge fusionnera des trames de données basées sur plusieurs colonnes. A partir du dernier exemple donné dans la documentation:

x <- data.frame(k1=c(NA,NA,3,4,5), k2=c(1,NA,NA,4,5), data=1:5)
y <- data.frame(k1=c(NA,2,NA,4,5), k2=c(NA,NA,3,4,5), data=1:5)
merge(x, y, by=c("k1","k2")) # NA's match

Cet exemple était destiné à illustrer l'utilisation de incomparables, mais il illustre également la fusion à l'aide de plusieurs colonnes. Vous pouvez également spécifier des colonnes distinctes dans x et y en utilisant by.x et by.y.

116
joran

J'espère que cela t'aides;

df1 = data.frame(CustomerId=c(1:10),
             Hobby = c(rep("sing", 4), rep("pingpong", 3), rep("hiking", 3)),
             Product=c(rep("Toaster",3),rep("Phone", 2), rep("Radio",3), rep("Stereo", 2)))

df2 = data.frame(CustomerId=c(2,4,6, 8, 10),State=c(rep("Alabama",2),rep("Ohio",1),   rep("Cal", 2)),
             like=c("sing", 'hiking', "pingpong", 'hiking', "sing"))

df3 = merge(df1, df2, by.x=c("CustomerId", "Hobby"), by.y=c("CustomerId", "like"))

En supposant que df1$Hobby et df2$like signifient la même chose.

44
Hyunbong Lee

Vous pouvez également utiliser la commande join (dplyr).

Par exemple: 

new_dataset <- dataset1 %>% right_join(dataset2, by=c("column1","column2"))
1
Daniela