Seite 1 von 1
NA löschen
Verfasst: Mi Dez 16, 2020 10:53 am
von steven_y
Ich möchte Zeilen löschen, sofern in einer anderen Spalte alle Werte NA sind. Ein Beispiel hilft:
Code: Alles auswählen
id <- c("a","a","b","b")
series <- c(1,NA,NA,NA)
df <- data.frame(id,series)
Für alle id "b" is der sind die Werte NA. Daher sollen jetzt alle Zeilen mit b in id gelöscht werden.
drop_na is nicht hilfreich, weil dann auch die zweite Beobachtung gelöscht wird. Wie mache ich das am schlausten?
Re: NA löschen
Verfasst: Mi Dez 16, 2020 11:30 am
von bigben
Vielleicht so?
Code: Alles auswählen
id <- c("a","a","b","b", "c", "c", "c", "d", "e")
series <- c(1,NA, NA,NA, 1,2,NA, 3, NA)
df <- data.frame(id,series)
keep <- ave(df$series, df$id, FUN = function(x) ifelse(all(is.na(x)), yes = FALSE, no = TRUE))
keep <- as.logical(keep) # beschreibt, welche Zeilen erhalten und welche gelöscht werden sollen.
df[keep,] # erhält nur die, in denen keep == TRUE ist
Im Übrigen solltest Du nie einen dataframe df nennen, denn df() ist bereits der Name einer Funktion in R. Sowas kann zu ganz kryptischen Fehlermeldungen führen, wenn Du was falsch machst.
LG,
Bernhard
Re: NA löschen
Verfasst: Mi Dez 16, 2020 11:50 am
von steven_y
Bestens, danke
Re: NA löschen
Verfasst: Mi Dez 16, 2020 12:44 pm
von Athomas
Im Übrigen solltest Du nie einen dataframe df nennen, denn df() ist bereits der Name einer Funktion in R.
Ist das nicht etwas zu akademisch? Ich benutze seit Äonen df als Namen für Dataframes, und dabei ist nie etwas schief gegangen.
Mir ist zumindest nie was aufgefallen

!
Re: NA löschen
Verfasst: Mi Dez 16, 2020 12:54 pm
von bigben
Wenn Dir das zu akademisch ist werde ich Dich nicht vom Gegenteil überzeugen. Wenn solche Fehler nicht vorkommen, dann ist es akademisch, wenn sie vorkommen, ist es praktisch. Eine irreführende Fehlermeldung weil jemand seine Daten so nennen wollte wie eine Funktion schon heißt hatten wir zuletzt vor 14 Tagen:
viewtopic.php?p=13607#p13607
LG,
Bernhard
Re: NA löschen
Verfasst: Mi Dez 16, 2020 1:04 pm
von Athomas
Ich glaube, das war damals noch was Anderes ...
Außerdem scheint es bei "df" keine Probleme zu geben:
Code: Alles auswählen
> df <- data.frame(Gruppe=LETTERS[1:10], Wert=runif(10))
>
> df(0.50, 3, 7)
[1] 0.6123581
> df[3, ]
Gruppe Wert
3 C 0.05513212
Re: NA löschen
Verfasst: Mi Dez 16, 2020 1:16 pm
von bigben
Es gibt grundsätzlich keine Probleme, wenn man alles richtig macht. R kann wunderbar damit umgehen, wenn Funktionen und Daten gleich heißen. Die Probleme machen immer die User. Es hätte auch in dem anderen Thread sicher kein Problem gegeben, wenn line auch der Name eines Vektors gewesen wäre. War er aber nicht.
Hätte man den Vektor oiuqweoriqq indiziert ohne ihn vorher zu definieren, dann hätte es eine schöne, brauchbare Fehlermeldung vom Typ
gegeben und nicht irgendwas über nichtindizierbare Closures.
Wer das Problem nicht hat, muss ja auf die Empfehlung nicht achten. Ich brauche auch keine Warnungen, dass Rauchen in diesem Abteil verboten ist...
LG,
Bernhard
Edit:
As a matter of good practise, you should usually avoid naming variables after base-R functions. (Calling variables data is a common source of this error.)
Eine Antwort die (nicht nur) das enthält hat auf stackoverflow 124 Zustimmungsklicks bekommen:
https://stackoverflow.com/a/11308796/6503141
Re: NA löschen
Verfasst: Mi Dez 16, 2020 3:22 pm
von Athomas
Eine Antwort die (nicht nur) das enthält hat auf stackoverflow 124 Zustimmungsklicks bekommen
Was sagt mir das?
Re: NA löschen
Verfasst: Mi Dez 16, 2020 4:21 pm
von bigben
Dass ich kein einsamer Rufer in der Wüste bin wenn ich finde, dass wir im Forum von solchem Gebrauch abraten sollten. Es schränkt Dich nicht in Deiner Freiheit ein, eine andere Meinung zu haben und stellt auch nicht infrage, dass steven diese Probleme nicht hatte oder dass Du mit solchen Fehlermeldungen schon klarkommst. Aber so ungewöhnlich ist das doch nicht, dass man seine Meinungen mit Links auf lesenswerte Seiten gleicher Meinung im Netz unterstützt, oder? Upvotes auf Stackoverflow können durchaus ein Hinweis darauf sein, dass viele Menschen einen Beitrag lesenswert finden.
Re: NA löschen
Verfasst: Mi Dez 16, 2020 4:44 pm
von Athomas
Es schränkt Dich nicht in Deiner Freiheit ein, eine andere Meinung zu haben
Ich meinte eigentlich die Zahl "124" - im Gegensatz etwa zu "23" oder "577"!