NA löschen

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
steven_y
Beiträge: 25
Registriert: Do Nov 19, 2020 12:16 pm

NA löschen

Beitrag 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?
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: NA löschen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
steven_y
Beiträge: 25
Registriert: Do Nov 19, 2020 12:16 pm

Re: NA löschen

Beitrag von steven_y »

Bestens, danke
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: NA löschen

Beitrag 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 :oops: !
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: NA löschen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: NA löschen

Beitrag 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
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: NA löschen

Beitrag 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

Code: Alles auswählen

Error: object 'oiuqweoriqq' not found
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... :lol:

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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: NA löschen

Beitrag von Athomas »

Eine Antwort die (nicht nur) das enthält hat auf stackoverflow 124 Zustimmungsklicks bekommen
Was sagt mir das?
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: NA löschen

Beitrag 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.
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: NA löschen

Beitrag 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"!
Antworten