2016-04-18 7 views
0

Ich habe zwei Datenrahmen. Eine ist eine Vorlage, die alle Zeilen enthält, die ich brauche. Ich brauche alle Kombinationen von Sport und Modell. Die andere ist die Ausgabe, die ich erhalte, die einige fremde Zeilen enthält und andere nicht enthält. Wie füge ich sie zusammen, so dass das Ausgabedatenfeld alle übereinstimmenden Zeilen enthält (löscht nicht benötigte Zeilen in der Ausgabe und nimmt andere benötigte Zeilen aus der Vorlage auf). Ich möchte, dass der letzte Datenrahmen den Durchschnitt und die Menge von der Ausgabe hat, mit Ausnahme derjenigen Zeilen, die nicht existierten, in welchem ​​Fall sie NA sein sollten.R Vergleichen, Zusammenführen, Match Datenfelder

Vorlage

  date gender licen checked sport model average amount 
1 3/21/16  Man CERT  1 baseball model1  NA  NA 
2 3/21/16  Man CERT  1 soccer model1  NA  NA 
3 3/21/16  Man CERT  1 football model1  NA  NA 
4 3/21/16 Woman CERT  1 baseball model2  NA  NA 
5 3/21/16  Man CERT  1 soccer model2  NA  NA 
6 3/21/16  Man CERT  1 football model2  NA  NA 
7 3/21/16 Woman NO  1 baseball model3  NA  NA 
8 3/21/16 Unknown NO  1 soccer model3  NA  NA 
9 3/21/16 Unknown NO  1 football model3  NA  NA 
10 3/21/16 Woman NO  1 baseball model4  NA  NA 
11 3/21/16 Woman NO  1 soccer model4  NA  NA 
12 3/21/16 Woman NO  1 football model4  NA  NA 

Ausgang:

 date gender licen checked sport model average amount 
1 3/21/16  Man CERT  1 baseball model1  1.2  12 
2 3/21/16  Man CERT  1 soccer model1  4.1  56 
3 3/21/16 Woman CERT  1 walking model2  6.5  33 
4 3/21/16  Man CERT  1 soccer model2  2.4  91 
5 3/21/16  Man CERT  1 football model2  1.1  14 
6 3/21/16 Woman NO  1 baseball model3  3.7  56 
7 3/21/16 Unknown NO  1 running model3  6.1  29 
8 3/21/16 Unknown NO  1 football model3  1.0  17 
9 3/21/16 Woman NO  1 baseball model4  1.6  56 
10 3/21/16 Woman NO  1 football model4  2.7  32 

Vielen Dank für Ihre Hilfe!

Antwort

2

Kopieren klebte Ihre Daten in read.table Funktion:

a <- read.table("clipboard", header = T) #Template 
b <- read.table("clipboard", header = T) #Output 

Sie die merge Funktion nutzen zu können, aber Sie müssen eine eindeutige Kennung. Erstellen Sie eins mit interaction. Paste würde hier auch funktionieren.

a$id <- interaction(a$sport, a$model) 
b$id <- interaction(b$sport, b$model) 

die Daten zusammenführen, und fügen Sie alle nicht passenden Fällen in der Vorlage df.

merge(a, b, by="id", all.x = T) 
1

Dies könnte funktionieren, Sport-Modellkombinationen in Vorlage einzigartig sind unter der Annahme:

# Drop NA answers 
NewData <- Template[, -which(names(Template %in% c("average", "amount")))] 

# merge on other data.frame 
newData <- merge(newData, Output, by=c("sport", "model"), all.x=T) 
Verwandte Themen