2016-07-20 7 views
0

Ich habe zwei Dateien, die ich zusammenführen möchte. Die erste Datei hat mehrere Variablen; die zwei wichtigen sind ID und ENDE. ID ist nicht eindeutig für eine Zeile; mehr als eine Zeile kann die gleiche ID haben. Die zweite Datei hat zwei Variablen, ID und START. In dieser Datei ist jede ID eindeutig - es gibt keine Zeilen mit derselben ID.Mischen Sie Dateien unterschiedlicher Länge in r basierend auf zwei Variablen (eine Übereinstimmung und ein Vergleich)

Ich möchte eine dritte Datei erstellen. Ich möchte Zeilen aus der ersten Datei behalten, die eine ID haben, die mit einer der IDs in der zweiten Datei übereinstimmt und bei der das END in der ersten Datei weniger als START von der zweiten Datei ist. Ich möchte nur Zeilen aus der ersten Datei behalten, die den Kriterien entsprechen. Ich möchte den START-Wert der zweiten Datei nicht beibehalten. Ich möchte auch keine Zeilen behalten, die nicht mit einer ID übereinstimmen und nicht END < START haben.

FILE 1 
ID END  
1  333    
2  555   
3  789   
4  234 



File 2 
ID  START 
1  432 
2  777 
3  444 


New FILE 
ID END 
1  333 
2  555 

Jede Hilfe wird geschätzt.

+0

Ich glaube, Sie einen Fehler in der examle haben, 'Starten' in Reihe 2 ist größer als' end' in Zeile 2 I bin fast fertig mit dem Code, ich sollte eine Antwort in einem Stück haben – Adam

+0

Merge auf ID-Spalte, dann filtern. Lesen Sie über merge [hier] (http://stackoverflow.com/questions/1299871). – zx8754

Antwort

1

dass file3 Unter der Annahme ist die letzten Sie wollen:

file3 = merge(file1, file2, by = "ID") 
file3 = file3[file3$END < file3$START, c("ID","END")] 
0

Nehmen wir an, Sie haben df1 für Datei1 und df2 für Datei2 und Sie möchten df3 für Ihre letzte Ausgabe machen.

rows <- df1$Id %in% df2$ID 
df3 <- df1[rows] 
df3 <- df1[df1$End > df2$End]