2013-05-13 6 views
2

Je souhaite comparer deux noms de colonnes de deux trames de données et créer une nouvelle table avec les noms de colonnes correspondants à partir des trames de données d'origine.comparer les noms de colonnes et créer une nouvelle table

a<-data.frame(a1=c(1,2,3,4,5),a2=c(2,3,4,5,6),b1=c(3,4,5,6,7),c1=c(4,5,6,7,8)) 
b<-data.frame(c1=c(10,20,30,40,50),b1=c(20,30,40,50,60),d1=c(30,40,50,60,70)) 

Je veux faire une nouvelle trame de données en ajoutant a + b lorsque la correspondance des noms de colonnes (par exemple 'c1', etc.). Par exemple. ma nouvelle base de données nommée 'c' sera maintenant comme ceci basé sur les données ci-dessus: c = data.frame (c1 = c (10 + 4,20 + 5,30 + 6,40 + 7,50 + 8), b1 = c (20 + 3,30 + 4,40 + 5,50 + 6,60 + 7))

Mon cadre de données original est beaucoup plus grand que ce qui précède, donc j'utilisais 'for (i in 1: dix)'. Mais cela ne fonctionne que lorsque les deux noms de colonnes sont dans le même ordre dans les deux dataframes.

Merci d'avance pour votre aide.

Répondre

4
as.data.frame(lapply(intersect(names(a), names(b)), 
       function(name) a[name] + b[name])) 
+1

C'est exactement ce que je cherchais. Merci. – Bhante

+0

Est-il possible de tracer ces noms de colonnes correspondants? J'ai remplacé l'addition avec des parcelles en utilisant: lapply (intersection (noms (a), noms (b)), fonction (nom) plot (un [nom], b [nom])) Il donne une erreur: Erreur dans stripchart.default (x1, ...): méthode de traçage invalide – Bhante

+1

Veuillez faire un nouveau post pour d'autres questions. –

1

la façon plus simple que je peux penser est

c <- cbind(b[, which(colnames(b)%in% colnames(a))], 
    a[, which(colnames(a)%in% colnames(b))]) 

est que ce que vous cherchais?

acclamations

+0

Il crée certainement une table avec les mêmes columnNames. Merci. – Bhante

Questions connexes