2016-04-11 16 views
-1

Ich habe eine Frage zum Zusammenführen von zwei Datensätze in R mit Bedingungen.Mischen Sie zwei Datensätze in R mit Bedingungen

Der erste Datensatz zeigt, welche Start- und Landebahn (Runway) an welchem ​​Datum verwendet wurde und ob ein Flugzeug von dieser Landebahn (A/D) kam oder ging.

Datensatz 1:

Date  Runway Arrival/Departure 
01-01-08 89  A 
01-01-08 120  A 
01-01-08 97  D 
01-01-09 89  A 
01-02-09 92  D 
01-02-10 89  A 

der zweite Datensatz beschreibt die Anzahl der Beschwerden pro Runway und pro Ankunft/Abfahrt. Zum Beispiel gehören die Beschwerden für den zweiten Datensatz zur Piste 89 und zur Ankunft (A) (obwohl dies im zweiten Datensatz selbst nicht erwähnt wird, wie Sie sehen können).

Datensatz 2:

Date  Complaints 
01-01-08 12 
01-01-09 15 
01-02-10 53 

Jetzt möchte ich die zweiten Daten auf dem ersten Set hinzuzufügen, wieder auf Datum basiert. Außerdem möchte ich, dass die Werte der Beschwerden von Datensatz 2 mit Runway 89 und Ankunft von Datensatz 1 verknüpft werden. Die Beschwerden für die anderen Start- und Landebahnen und die Ankunft/Abreise werden somit zu NA.

Dies ist ein Beispiel für den endgültigen Datensatz, ich erstellen möchten:

Date  Runway A/D  Complaints 
01-01-08 89  A  12 
01-01-08 120  A  NA 
01-01-08 97  D  NA 
01-01-09 89  A  15 
01-02-09 92  D  NA 
01-02-10 89  A  53 

Ich dachte, dass dies mit einer if-Anweisung funktionieren würde: wenn Landebahn 89 und der Ankunft, Datensatz auf Datum basiert fusionieren. Aber ich habe das gewünschte Ergebnis noch nicht erreicht und ich habe keine Ahnung, wie es weitergehen soll. Einfaches Verschmelzen hat auch nicht funktioniert, denn das wird Beschwerden für alle Landebahnen geben, aber ich will nur, dass es mit Piste 89 und Ankunft verbunden ist.

Wenn mir jemand helfen kann, würde ich es sehr schätzen!

+0

eine schnelle Lösung ist Runway und A/D zu Dataset2 hinzufügen ? – chinsoon12

+0

Danke für Ihre schnelle Antwort! Der gesamte Datensatz besteht aus mehr Beschwerdendateien (also zB auch für Runway 120, A), also bin ich mir nicht sicher, ob ich das machen kann, weil es dann immer noch nicht richtig verlinkt wäre? – Veraaa

+0

Woher wissen Sie, dass Dataset2 für 89, A ist? – chinsoon12

Antwort

0

Ich hatte dies im Sinn:

Formulardaten

df1 <- data.frame(Date=c("01-01-08","01-01-08","01-01-08","01-01-09","01-02-09","01-02-10"),Runway=c(89,120,97,89,92,89),AD=c("A","A","D","A","D","A")) 
df2 <- data.frame(Date=c("01-01-08","01-01-09","01-02-10"),Complaints=c(12,15,53)) 

Merge nach Datum

df3 <- merge(df1,df2,by="Date",all.x=T) 

Einfache Schleife auch irrelevant Werte für das Entfernen

for(i in 1:6) 
    { 
    if(df3$Runway[i]==89)df3Complaints[i] else df3$Complaints[i] <- NA 
} 

Sie umfassen können der Arriva l/Departure Variable in der Schleife, wenn Ihre ursprünglichen Arbeitsdatum enthalten Abweichungen von Gate 89 und Sie nicht wollen, die mit den Beschwerden in Verbindung gebracht werden:

for(i in 1:6) 
    { 
    if(df3$Runway[i]==89 && df3$AD[i]=="A")df3Complaints[i] else df3$Complaints[i] <- NA 
} 
+1

keine Notwendigkeit für eine 'for' Schleife imo:' df3 [df3 $ Runway! = 89, 'Beschwerden'] <- NA' funktioniert gut – Jaap

+0

Sie haben Recht. Ich aber lebe gerne am Rande. –

+0

Ja, es funktioniert jetzt! Ich danke dir sehr!! Ich schätze das wirklich! – Veraaa