Ich habe zwei Datenrahmen:Suche nach einem Wert von einem Datenrahmen Spalte in einem zweiten Datenrahmen von Intervallen
CHR POS
10 289968
10 580270
CHR START STOP
10 250000 300000
10 700422 700500
Suche # 1
> subset(df1, CHR==df2$CHR & POS >= df2$START & POS <= df2$STOP)
CHR POS
1 10 289968
Aber wenn ich die Reihenfolge der Zeilen in df2 Flip , dann funktioniert die Suche nicht. Zum Beispiel ist df2 jetzt wie folgt
CHR START STOP
10 700422 700500
10 250000 300000
> subset(df1, CHR==df2$CHR & POS >= df2$START & POS <= df2$STOP)
[1] CHR POS
<0 rows> (or 0-length row.names)
Warum ist die Reihenfolge hier wichtig?
Es ist, weil die Bedingung 'POS> = df2 $ Starten' (oder' CHR == df2 $ CHR' oder 'POS <= df2 $ STOP') vergleicht zwei Vektoren * * Element-für-Element **. Der logische Ausdruck gibt genau einen Vektor zurück, der angibt, welche Zeilen für das zweite Argument von "subset" zu behalten sind. – raymkchow
Ich glaube nicht, dass ich das verstehe. Kannst du ein wenig weiterarbeiten? – cryptic0
'df1 $ CHR == df2 $ CHR' gibt '[1] TRUE TRUE zurück, weil die ersten und zweiten Elemente von' df1 $ CHR' ('10') mit' df2 $ CHR' identisch sind. Die Reihenfolge ist wichtig, weil 'df1 $ POS> = df2 $ START' und 'df1 $ POS <= df2 $ STOP' ''1 FALSE TRUE' und' [1] TRUE FALSE' zurückgibt, nachdem Sie die Reihenfolge der Zeile umgedreht haben. anstelle von "[1] TRUE FALSE" und "[1] TRUE TRUE" vor dem Spiegeln. – raymkchow