Ich konnte keine vorherige Frage finden, die genau das beantwortet, was ich versuche.Zusammenführen von zwei Tabellen mit mehreren Bedingungen
df1
chr position effect.exposure ...
1 12345 A ...
2 54321 G ...
2 6789 C ...
3 9876 D ...
df2
chr position effect.outcome other ...
1 12345 A C ...
2 54321 T G ...
3 12314 C A ...
5 12321 C D ...
Das ist das allgemeine Format meiner Daten ist, mit ihm mehr anderen Spalten nicht relevant für die Verschmelzung zu sein, die aber gehalten werden muß.
Ich möchte Zeilen, die die gleiche "CHR" und "Position" streng zusammenführen, aber auch sicherstellen, dass "effect.exposure" in df1 entweder "effect.outcome" oder "other" in df2 entspricht. Wenn "effect.exposure" weder mit "effect.outcome" noch mit "other" übereinstimmt, möchte ich, dass diese Zeile gelöscht wird.
"chr" und "position" können kombiniert werden, um jeweils nur eine Spalte in den Ergebnisdaten zu haben, aber ich möchte, dass die beiden Spalten "effect" und "other" in der endgültigen Datentabelle getrennt bleiben.
Aktualisierung:
gefunden einen Weg um das Problem. Die Art und Weise, wie ich es gemacht habe, besteht darin, die beiden Datenrahmen durch "chr" und "position" zusammenzufassen.
new.df <- merge(df1, df2, by = c("chr", "position"))
Von hier aus habe ich dann eine Teilmenge dieses Datenrahmen genommen, in den „effect.exposure“ entweder auf „effect.outcome“ oder „andere“ gleich ist.
final.df <- new.df[new.df$effect.exposure == new.df$effect.outcome |
new.df$effect.exposure == new.df$other, ]
Volle Offenlegung, dies ist möglicherweise nicht die effizienteste Methode, aber es funktioniert einwandfrei.
Mögliche Duplikat [R: zwei Datenrahmen zusammenführen, wenn eine von zwei Kriterien erfüllt] (https://stackoverflow.com/ Fragen/38753092/r-Merge-zwei-Daten-Frames-wenn-von-zwei-Kriterien-Übereinstimmungen) – duckmayr