Ich habe eine Datenmenge, die wie folgt aussieht:Wählen Reihen auf dem am nächsten Tag auf Basis bei gleichzeitiger Erfüllung zusätzliche Kriterien in R
data <- read.table(text = "OID Local_date Dateincide Join_Count TARGET_FID JOIN_FID indiv_code indiv_name sex month year treatment perturbati xx yy id_treatme id_treat_1 lion_month treatment_ OID_hc DateRecord Year_1 location village Longhomest Lathomeste Longitude Latitude Animalslos Specieslos
3 2015-10-25 2008-01-15 1 127415 2 NGAaF1 Ngamo_Urchin F 10 2015 E A 547514.43970000000 7883074.46200000000 11 11E NGAaF1_10_2015 11E_NGAaF1_10_2015 3 19-02-08 2008 E Nganyana 548505 7881998 547800 7883200 4 cattle
3 2016-01-18 2008-01-15 1 128429 2 NGAaF1 Ngamo_Urchin F 1 2016 E A 547461.30170000000 7882858.82600000000 11 11E NGAaF1_1_2016 11E_NGAaF1_1_2016 3 19-02-08 2008 E Nganyana 548505 7881998 547800 7883200 4 cattle
3 2016-02-23 2008-01-15 1 128858 2 NGAaF1 Ngamo_Urchin F 2 2016 E A 547395.24460000000 7883056.29100000000 11 11E NGAaF1_2_2016 11E_NGAaF1_2_2016 3 19-02-08 2008 E Nganyana 548505 7881998 547800 7883200 4 cattle
3 2015-10-25 2008-01-15 1 130659 2 NGAaF1 Ngamo_Urchin F 10 2015 E A 547514.43970000000 7883074.46200000000 12 12E NGAaF1_10_2015 12E_NGAaF1_10_2015 3 19-02-08 2008 E Nganyana 548505 7881998 547800 7883200 4 cattle
3 2016-01-18 2008-01-15 1 131673 2 NGAaF1 Ngamo_Urchin F 1 2016 E A 547461.30170000000 7882858.82600000000 12 12E NGAaF1_1_2016 12E_NGAaF1_1_2016 3 19-02-08 2008 E Nganyana 548505 7881998 547800 7883200 4 cattle
3 2016-02-23 2008-01-2 2 NGAaF1 Ngamo_Urchin F 2 2016 E A 547395.24460000000 7883056.29100000000 12 12E NGAaF1_2_2016 12E_NGAaF1_2_2016 3 19-02-08 2008 E Nganyana 548505 7881998 547800 7883200 4 cattle", header = TRUE)
Jede Zeile ist ein Datensatz mit einem Code "OID"
, ein "Local_date"
, "Dateincide"
und anderen Attributen. Ich habe Daten, die gerade nicht als NA codiert sind, aber leer gelassen. Der ursprüngliche Datensatz ist groß und er hat 120.000 Zeilen und 40 Spalten, weshalb ich versuche, einen R-Code zu finden, der auf folgende Weise am effizientesten funktioniert:
Ich möchte die Werte OID
durchgehen für alle Zeilen, die sich die gleichen OID
teilen, um nach der Zeile zu suchen, für die "Dateincide"
() am nächsten ist (entweder vorher oder nachher). Dann schreiben Sie "Behalten" für diese Zeilen mit dem nächsten Datum in einer neuen Spalte mit dem Namen "Keep/delete"
.
Es gibt jedoch eine Bedingung: Es gibt Zeilen, die die gleiche OID haben und das gleiche "Local_date" haben, so dass es in einigen Fällen zwei oder mehr Datensätze mit der gleichen Übereinstimmung gibt. Ich möchte alle diese Übereinstimmungen nicht nur eins behalten, weil sie unterschiedliche Aufzeichnungen entsprechend der Spalte "id_treat_1" darstellen.
Die Ausgabe, die ich will, ist die folgende (ich habe es kurz gemacht, um deutlich zu machen, aber ich möchte auch den Rest der Spalten halten):
OID Local_date Dateincide keep/delete id_treat_1
3 2015-10-25 2008-01-15 keep 11E
3 2016-01-18 2008-01-15 delete 11E
3 2016-02-23 2008-01-15 delete 11E
3 2015-10-25 2008-01-15 keep 12E
3 2016-01-18 2008-01-15 delete 12E
3 2016-02-23 2008-01-15 delete 12E
13 2011-11-08 2008-02-14 keep 7E
So gibt es 2 Datensätze mit die gleiche OID = 3, die mit "keep" gekennzeichnet wurde, weil sie das nächstliegende Datum in "Local_date" bis "Dateincide" haben und in der Spalte "id_treat_1" einen anderen Wert haben. Im Fall des Datensatzes mit OID 13 wurde die Zeile mit dem nächstliegenden Datum ausgewählt und es gibt nur eine, weil es in der Spalte "id_treat_1" keine andere Übereinstimmung gab, die einen anderen Wert hatte.
Jede Hilfe zur Berechnung dieser "Keep/delete" -Spalte, die mehrere Übereinstimmungen ermöglichen würde, und wie mit den fehlenden Daten umzugehen ist, wird sehr geschätzt!
könnten Sie ein Beispiel hinterlassen, die in Betracht alle Ihre Constraints nehmen? d.h. mit verschiedenen IDs und verschiedenen ID_Treats? – Sotos