Ich arbeite mit einem Datenrahmen (in R), der Beobachtungen von Tieren in freier Wildbahn (Aufnahmezeit/-datum, Standort und Artenidentifikation) enthält. Ich möchte Zeilen entfernen, die eine bestimmte Spezies enthalten, wenn weniger als x Beobachtungen im gesamten Datenfeld vorhanden sind. Ab sofort konnte ich mit dem folgenden Code arbeiten, aber ich weiß, dass es einen eleganteren und effizienteren Weg geben muss.Reihen von Datenrahmen basierend auf der Häufigkeit einer Variablen entfernen
namelist <- names(table(ind.data$Species))
for (i in 1:length(namelist)) {
if (table(ind.data$Species)[namelist[i]] <= 2) {
while (namelist[i] %in% ind.data$Species) {
j <- match(namelist[i], ind.data$Species)
ind.data <- ind.data[-j,]
}
}
}
Der namelist
Vektor enthält alle Arten Namen in dem Datenrahmen ind.data
und die if
Anweisung überprüft, ob die Frequenz der i
ten Namen auf der Liste weniger als x (2
in diesem Beispiel).
Ich bin mir völlig bewusst, dass dies nicht eine sehr saubere Art ist, es zu tun, ich habe es gestern am Ende des Tages zusammengeworfen, um zu sehen, ob es funktionieren würde. Jetzt suche ich nach einem besseren Weg, oder zumindest nach dem, wie ich es verfeinern könnte.
Das hat perfekt funktioniert, danke! Es ist auch ziemlich schnell auf großen Datensätzen, besonders im Vergleich zu meiner Hacky For-Schleife von vor. – twieg
@twieg Ja, data.table ist sehr schnell – akrun