2016-08-04 8 views
0

Ich habe zwei Datenrahmen mit der gleichen Anzahl von Spalten, aber unterschiedlicher Anzahl der Zeilen:Spiel Spalten von zwei Datenrahmen und Filter auf dem Wert eines anderen Spalts

colA colB colC colD 
xxx 303 200 A 
yyy 111 20 B 
zzz 24 188 C 

Ich brauche colAdf1-colA von df2 anzupassen und wählen sie nur die Zeilen, in denen df1$colB - df2$colC <= 2000

ich habe versucht, die for-Schleife zu tun, aber es hat nicht funktioniert:

for (i in nrow(df1)) { 
    for (j in nrow(df2)) { 
     df3 <- subset(merge(df2[j,], df1[i,], by="row.names", all=T), df2$colA[j] == df1$colA[i] && (df1$colB[i] - df2$colC[j]) <= abs(2000)) 
    } 
} 

Was mache ich falsch? Es gibt mir keinen Fehler, aber der neue Datenrahmen ist leer.

+0

Wahrscheinlich so etwas wie 'dfNew lmo

+0

Das hat funktioniert. Vielen Dank! – marinay

Antwort

0

Wenn dplyr eine Option, versuchen Sie dies:

df1 %>% 
    inner_join(df2, by = "colA") %>% 
    filter(abs(colB.x - colC.y) <= 2000) 

Diese Sie einen Rahmen mit Spalten geben colA, colB.x, colC.x, colD.x, colB.y, colC.y, colD.y wo die .x von DF1 und die .y sind von DF2. Beachten Sie auch, dass b - a <= abs(2000) wahrscheinlich abs(b - a) <= 2000

Verwandte Themen