2012-05-11 1 views
0

Je travaille avec deux ensembles de données différents et j'aimerais déplacer les données de l'une à l'autre. Je pense de cette façon: l'un contient les résultats, couplés avec le facteur correct (HTm), et je veux les étaler sur une autre image. Voici la première trame:Déplacement des résultats d'une trame de données vers un ensemble de données

head(five) 
    Week  Game.ID  VTm VPts HTm HPts HDifferential VDifferential 
    1 1 [email protected] OAK 20 NE 30  10   -10 
    2 1 [email protected] ARI 19 NYG 42   23   -23 
    3 1 [email protected] CHI 7 WAS 9    2   -2 
    4 1 [email protected] CIN 27 CLE 13   -14   14 
    5 1 [email protected] DAL 28 SD 24   -4    4 
    6 1 [email protected] DEN 10 MIA 34   24   -24 
    VTm.f HTm.f average 
    1 OAK NE 19.4375 
    2 ARI NYG 19.4375 
    3 CHI WAS 19.4375 
    4 CIN CLE 19.4375 
    5 DAL SD 19.4375 
    6 DEN MIA 19.4375 

    > tail(five) 
     Week    Game.ID VTm VPts HTm HPts HDifferential VDiff 
    262 19 [email protected] WAS 10 SEA 20   10 -10 
    263 19 [email protected] CAR 29 CHI 21   -8  8 
    264 19 [email protected] PIT 21 IND 18   -3  3 
    265 20 [email protected] CAR 14 SEA 34   20 -20 
    266 20 [email protected] PIT 34 DEN 17   -17  17 
    267 21 [email protected] SEA 10 PIT 21   11 -11 
      VTm.f HTm.f average 
     262 WAS SEA  0 
     263 CAR CHI  0 
     264 PIT IND  0 
     265 CAR SEA  0 
     266 PIT DEN  0 
     267 SEA PIT  0 

et voici l'autre (moyen agrégé de la première trame).

head(fiveINFO) 
    HTm  HPts  VPts average 
    1 ARI 19.87500 19.00000 19.43750 
    2 ATL 24.75000 19.12500 21.93750 
    3 BAL 19.37500 13.75000 16.56250 
    4 BUF 16.50000 17.37500 16.93750 
    5 CAR 25.12500 23.27273 24.19886 
    6 CHI 18.77778 14.00000 16.38889 

    tail(fiveINFO) 
    VTm HPts VPts average 
27 SEA 21.00 25.000 23.0000 
28 SF 30.75 12.625 21.6875 
29 STL 28.00 22.000 25.0000 
30 TB 15.75 15.375 15.5625 
31 TEN 28.00 14.750 21.3750 
32 WAS 20.60 18.800 19.7000 

Pour référence, ces données sont en train d'examiner les scores NFL. Je veux prendre les moyennes dans cinqINFO, encadrer deux, et les déplacer à l'équipe correspondante dans la première trame. cinq est long de 266 lignes, alors que fiveINFO est de 32 lignes - fiveINFO ne contient qu'une fois HTm, tandis que cinq contient chacune 8-10 fois, selon le nombre de parties à domicile que chaque équipe joue. J'ai trouvé plusieurs réponses qui semblaient similaires, mais avec des ensembles de données beaucoup plus petits. Je ne veux pas fusionner les deux; Je veux que les données de moyennes de la seconde trame soient réparties entre les valeurs HTm appropriées dans la première trame. J'imagine que j'aurais besoin d'utiliser une sorte de boucle for pour cela, mais tout ce que je fais est en train de se faire remarquer. Aidez-moi?

+1

Je me bats pour comprendre pourquoi 'fusion()' ne fait pas exactement ce que vous voulez. Ce que vous semblez vouloir dire, c'est précisément ce que cette fonction va faire. – joran

+0

Donc, quelque chose comme ça n'est pas ce que vous voulez? J'ai recréé vos données: 'five <- data.frame (HTm = c (" OAK "," OAK "," ARI "," ARI ")); fiveINFO <- data.frame (HTm = c (" OAK "," ARI "), fusionner (cinq, fiveINFO, par =" HTm ");' – thelatemail

+0

lorsque j'ai utilisé la fusion pour essayer d'obtenir les données à diffuser pour le HTm correct, tous ont montré en tant que "ARI" et a pris la moyenne d'ARI de 19.4375. rétrospectivement j'ai probablement juste écrit le code de manière incorrecte, comme suit: fusionner (cinq, fiveINFO [, c ("HTm", "average")]) –

Répondre

1

total<-merge(five, fiveINFO, by="HTm")

où total est la trame de données qui contient les colonnes fusionnées à partir de cinq et fiveINFO sur la base de la colonne de htm. La valeur de htm qui ne correspond pas à cinq et cinqINFO ne sera pas remplie. Mais, si vous voulez que cela soit rempli avec NA, vous pouvez le faire explicitement (utilisez cette option dans la fonction de fusion: all=TRUE, all.x ou all.y = TRUE).

Vous pouvez également supprimer des colonnes supplémentaires dont vous ne voulez pas après la fusion.

total=subset(total,select= -c(HPts,VPts)) #Pour suppression de colonnes HPTS, VPT de l'issue de la fusion trame de données

+0

Merci pour l'aide! Question rapide: quand j'ai essayé ce code, j'ai l'erreur suivante: Erreur dans fix.by (by.y, y): 'by' doit spécifier une ou des colonne (s) valide (s) Une idée de comment je pourrais résoudre ça? Ce sont certainement des colonnes valides ... –

+0

assurez-vous que le nom de la colonne est "HTm" dans les deux dataframes - five et fiveINFO. R est sensible à la casse. ou si vous n'avez pas de nom de colonne commun dans les deux jeux de données, utilisez (..., by.x = "columnname in dataframe five", by.y = "nom de la colonne dans la trame de données fiveINFO") – Subs

+0

Est-ce que "HTm" et "VTm" sont deux colonnes séparées dans la deuxième trame de données fiveINFO? Vos informations de tête et de queue ne correspondent pas au nom de la colonne pour la 2ème trame de données. Veillez à utiliser le nom de colonne correct lors de la fusion. (si les deux dataframes contiennent le même nom de colonne, utilisez 'by' ou bien utilisez' by.x' et 'by.y' pour fusionner) – Subs

Questions connexes