NA behalten in subset
-
- Beiträge: 19
- Registriert: Sa Mär 16, 2019 11:46 am
NA behalten in subset
Hallo zusammen,
ich möchte einzelne Zeilen aus meinem Datensatz löschen (z.B. hier alle, die bei v_1 "Baum" eingegeben haben) und wollte dazu die subset-Funktion nutzen:
data <- subset(data, v_1 != "Baum")
Das Problem ist jetzt, dass RStudio nicht nur diese Zeilen löscht, sondern auch alle, die bei v_1 NA haben. Kann mir jemand sagen, wie ich das verhindern kann?
Vielen Dank schonmal!
ich möchte einzelne Zeilen aus meinem Datensatz löschen (z.B. hier alle, die bei v_1 "Baum" eingegeben haben) und wollte dazu die subset-Funktion nutzen:
data <- subset(data, v_1 != "Baum")
Das Problem ist jetzt, dass RStudio nicht nur diese Zeilen löscht, sondern auch alle, die bei v_1 NA haben. Kann mir jemand sagen, wie ich das verhindern kann?
Vielen Dank schonmal!
Re: NA behalten in subset
Code: Alles auswählen
# Beispieldaten erzeugen
forum <- data.frame(v_1 = c("Baum", NA, "rosa", "blau", "gelb", "Baum", NA), v_2 = letters[1:7])
forum
# das Problem
subset(forum, v_1 != "Baum")
# das Problem gelöst - edit: löst es gar nicht
subset(forum, v_1 != "Baum", na.rm = FALSE)
# alternative Lösung - edit: auch nicht
forum[forum$v_1 != "Baum", ]
Warning
This is a convenience function intended for use interactively. For programming it is better to use the standard subsetting functions like [, and in particular the non-standard evaluation of argument subset can have unanticipated consequences.
Zuletzt geändert von Hufeisen am Sa Mär 16, 2019 3:59 pm, insgesamt 2-mal geändert.
Re: NA behalten in subset
Das funktioniert nicht, NA (wie auch immer!) verglichen mit "Baum" ergibt NA!# alternative Lösung
forum[forum$v_1 != "Baum", ]
Die meiner Meinung nach "natürliche" Antwort auf die Frage wäre:
Code: Alles auswählen
subset(data, v_1 != "Baum" | is.na(v_1))
Eine der wenigen mächtigen Funktionen in R, an deren Syntax man sich auch nach Wochen noch erinnert !
Re: NA behalten in subset
Da hast du Recht. Tatsächlich lösen beide Varianten von mir das Problem nicht oder nicht zufriedenstellend. Was habe ich mir das vorhin nur eingebildet, auf dem Schirm zu sehen?
-
- Beiträge: 19
- Registriert: Sa Mär 16, 2019 11:46 am
Re: NA behalten in subset
Ganz vielen Dank, das hat mir sehr geholfen!
Ich habe jetzt außerdem noch eine Variable, die die wöchentliche Arbeitszeit erfasst. Das sollte eigentlich eine numerische Variable sein, ist es aber irgendwie nicht (wenn ich is.numeric() eingebe, kommt FALSE heraus und wenn ich ein subset erzeugen will aus allen Fällen, die mind. 5 Stunden pro Woche arbeiten, kommt die Fehlermeldung: In Ops.factor(v_330, 5) : ‘>’ not meaningful for factors
Kann mir jemand sagen, wie ich die Variable in eine numerische umwandeln kann? Ich habe es schon mit as.numeric() versucht, aber das klappt nicht, vor allem kommen dann auch falsche Zahlen raus (z.B. bei summary(as.numeric(data$v_330))) und die Nachkommastellen sind einfach weg.
Ich habe jetzt außerdem noch eine Variable, die die wöchentliche Arbeitszeit erfasst. Das sollte eigentlich eine numerische Variable sein, ist es aber irgendwie nicht (wenn ich is.numeric() eingebe, kommt FALSE heraus und wenn ich ein subset erzeugen will aus allen Fällen, die mind. 5 Stunden pro Woche arbeiten, kommt die Fehlermeldung: In Ops.factor(v_330, 5) : ‘>’ not meaningful for factors
Kann mir jemand sagen, wie ich die Variable in eine numerische umwandeln kann? Ich habe es schon mit as.numeric() versucht, aber das klappt nicht, vor allem kommen dann auch falsche Zahlen raus (z.B. bei summary(as.numeric(data$v_330))) und die Nachkommastellen sind einfach weg.
Re: NA behalten in subset
Dieses mal hat mich unsere Tochter ausschlafen lassen . as.numeric() ist schon richtig, klappt aber nicht mit Faktoren. Man muss es mit as.character() kombinieren.
Code: Alles auswählen
# Faktor erstellen
forum <- data.frame(einFaktor = as.factor(c(1:10)))
str(forum)
# umkodieren
forum$keinFaktor <- as.numeric(as.character(forum$einFaktor))
str(forum)
# Output
'data.frame': 10 obs. of 2 variables:
$ einFaktor : Factor w/ 10 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10
$ keinFaktor: num 1 2 3 4 5 6 7 8 9 10
-
- Beiträge: 19
- Registriert: Sa Mär 16, 2019 11:46 am
Re: NA behalten in subset
Das versteh ich nicht so ganz. Wozu ist der Vektor von 1 bis 10 da und muss ich das irgendwie anpassen?
Und steht forum für den gesamten Datensatz, den ich nutze oder ist das ein neu erzeugter Datensatz?
Und steht forum für den gesamten Datensatz, den ich nutze oder ist das ein neu erzeugter Datensatz?
Re: NA behalten in subset
Am allerbesten wäre natürlich, die Daten direkt richtig einzulesen - ich nehme an, Du nutzt read.table oder Ähnliches!?Kann mir jemand sagen, wie ich die Variable in eine numerische umwandeln kann?
Sobald read.table etwas nicht als Zahl interpretieren kann (da reicht ein "falsches" Zeichen) wird die komplette Variable als Character eingelesen, und wenn dann noch default.stringsAsFactors() auf TRUE steht - was in der Regel so ist - wird das ganze Zeug in einen Faktor konvertiert...
-
- Beiträge: 19
- Registriert: Sa Mär 16, 2019 11:46 am
Re: NA behalten in subset
Ja, es liegt daran, dass in einem Fall Buchstaben eingegeben wurden. Ich habe read.csv() genutzt. Kann ich denn irgendwie verhindern, dass die Variable dann als character eingelesen wird? Am besten wäre, wenn der eine Fall mit den Buchstaben dann einfach als NA gilt.
Re: NA behalten in subset
Das ist einfach nur ein Beispieldatensatz zum Zeigen. Den Befehl as.numeric(as.character()) musst Du auf deine betreffenden Spalten anwenden. Um die Daten von vornherein richtig einzulesen, hilft das Argument colClasses = "DATENTYP". Wobei DATENTYP für logical, integer, numeric, complex, character, raw steht.electricEH hat geschrieben: ↑So Mär 17, 2019 6:32 pm Das versteh ich nicht so ganz. Wozu ist der Vektor von 1 bis 10 da und muss ich das irgendwie anpassen?
Und steht forum für den gesamten Datensatz, den ich nutze oder ist das ein neu erzeugter Datensatz?