Hallo, Freunde der Datenwildnis!
Ich möchte aus meinem Datensatz data_19_without_NA bestimmte Reihen entfernen. Aber es ist etwas kompliziert. In der Spalte spec stehen Baumarten, von denen jede Art mehrmals in dieser Spalte vorkommt.
In der Spalte height_of_diam steht die Höhe in der der Stammdurchmesser gemessen wurde.
Ich möchte alle Reihen mit Baumarten entfernen, von denen jeder Baum in der Höhe 1,30 gemessen wurde. Das heißt, alle Reihen bei denen in der Spalte spec die Baumarten mit der gleichen Bezeichnung auch in der Spalte height_of_diam den Wert 1,30 haben.
Also wenn z.B. die Baumart Schizolobium parahyba immer in 1,30 gemessen wurde, sollen alle Reihen mit dieser Baumart weg. Und alle anderen Baumarten, bei denen das der Fall ist (also bei denen in der Spalte height_of_diam immer 1,30 steht).
Ich könnte natürlich alle diese Baumarten zusammenfassen, aber dazu müsste ich mir die mühselig durch filtern einzeln raussuchen und eine elendig lange Wurst schreiben, weil das um die 50 Baumarten sind. Und dann bestünde noch das Risiko, dass ich dabei einen Fehler mache.
Gibt es irgendeine Möglichkeit bzw. eine Kombination von Befehlen, mit der man das machen kann?
Hier ist ein Screenshot von meinen Daten
LG,
Evy
kompliziertes Filtern eines Datensatzes
Re: kompliziertes Filtern eines Datensatzes
Hallo Evy,
vielleicht funktioniert dies:
jedoch ist für Gleitkommazahlen der Operator == etwas heikel.
https://stackoverflow.com/questions/588 ... ath-broken
Oder sowas wie:bzw.
Gruß, Jörg
vielleicht funktioniert dies:
Code: Alles auswählen
Spec130 <- aggregate(height_of_diam ~ spec, data=data_19_without_NA, FUN=function(x) !all(x==1.30))
merge(Spec130[Spec130[,2], -2], data_19_without_NA)
https://stackoverflow.com/questions/588 ... ath-broken
Oder sowas wie:
Code: Alles auswählen
S <- with(iris, tapply(Sepal.Length, Species, FUN=function(x) !all(x>4.5)))
subset(iris, Species %in% names(S[S]))
Code: Alles auswählen
S <- with(iris, tapply(Sepal.Length>4.5, Species, FUN=all))
subset(iris, Species %in% names(S[!S]))