kompliziertes Filtern eines Datensatzes

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
evelyn92
Beiträge: 18
Registriert: Sa Feb 15, 2020 5:48 pm

kompliziertes Filtern eines Datensatzes

Beitrag von evelyn92 »

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
data_19_without_NA.JPG
LG,
Evy
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: kompliziertes Filtern eines Datensatzes

Beitrag von jogo »

Hallo Evy,

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)
jedoch ist für Gleitkommazahlen der Operator == etwas heikel.
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]))
bzw.

Code: Alles auswählen

S <- with(iris, tapply(Sepal.Length>4.5, Species, FUN=all))
subset(iris, Species %in% names(S[!S]))
Gruß, Jörg
Antworten