Missings identifizieren und damit umgehen
Moderator: jogo
Missings identifizieren und damit umgehen
Hallo ihr Lieben,
ich bräuchte nochmal eure Hilfe. Ich habe 21 Spalten, die Items eines Fragebogen repräsentieren und von den Versuchspersonen beantwortet wurden. Jetzt würde ich gerne zunächst einmal die Spalten in einen neuen Datensatz extrahieren um mich dann mit den Missings zu beschäftigen und ggf. Vpn ausschließen zu können.
Jetzt würde ich gerne wissen, welche Versuchspersonen mehr als 2 Missings haben und die dann ausschließen.
Dann würde mich außerdem interessieren, welche Personen <= 2 Missings haben und die durch den Mittelwert der übrigen Items der jeweiligen Person ersetzen. Wenn mir jemand mit diesen Anliegen helfen könnte, wäre ich super dankbar! Könnte ich auch gut für den übrigen Datensatz gebrauchen
Liebe Grüße
Lis
ich bräuchte nochmal eure Hilfe. Ich habe 21 Spalten, die Items eines Fragebogen repräsentieren und von den Versuchspersonen beantwortet wurden. Jetzt würde ich gerne zunächst einmal die Spalten in einen neuen Datensatz extrahieren um mich dann mit den Missings zu beschäftigen und ggf. Vpn ausschließen zu können.
Jetzt würde ich gerne wissen, welche Versuchspersonen mehr als 2 Missings haben und die dann ausschließen.
Dann würde mich außerdem interessieren, welche Personen <= 2 Missings haben und die durch den Mittelwert der übrigen Items der jeweiligen Person ersetzen. Wenn mir jemand mit diesen Anliegen helfen könnte, wäre ich super dankbar! Könnte ich auch gut für den übrigen Datensatz gebrauchen
Liebe Grüße
Lis
Re: Missings identifizieren und damit umgehen
Hallo Lis,
kannst Du bitte die Struktur des Dataframes zeigen?
Das ist der Output von
Gruß, Jörg
kannst Du bitte die Struktur des Dataframes zeigen?
Das ist der Output von
Code: Alles auswählen
str(DeinDataframe)
Re: Missings identifizieren und damit umgehen
Schonmal als Hinweis, bis Du Jörgs Frage beantwortest:
Code: Alles auswählen
bsp <- data.frame(name = c("Alpha", "Bravo", "Delta", "Echo", "Foxtrott", "Golf", "Hotel"),
s1 = c(NA, 1:5, NA), s2 = c(NA, 1:4, NA, NA), s3 =c(NA, NA, NA, .1, 22, NA, NA))
print(bsp)
bsp$imputeValue <- rowMeans(bsp[,c("s1", "s2", "s3")], na.rm = TRUE) # Mittelwert für später
bsp$NAzaehler <- apply(bsp, 1, function(x) sum(is.na(x))) # wieviele NA in dieser Zeile
print(bsp)
nicht_mehr_als_zwei_NA <- bsp[bsp$NAzaehler<=2,] # lösche die mit zuvielen NA
print(nicht_mehr_als_zwei_NA)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Missings identifizieren und damit umgehen
Huhu! Der Output wird leider nur verkürzt dargestellt. Die betreffenden Variablen sind im Output nicht zu sehen. Die meisten anderen Variablen sind allerdings "num"(erisch?).jogo hat geschrieben: ↑Di Mai 21, 2019 4:34 pm Hallo Lis,
kannst Du bitte die Struktur des Dataframes zeigen?
Das ist der Output vonGruß, JörgCode: Alles auswählen
str(DeinDataframe)
Re: Missings identifizieren und damit umgehen
Hallo Bernhard! Danke für Deine Antwort! Zusammen mit Deiner Syntax hab ich eine Lösung gefunden. Ich hab die betreffenden Variablen in eine Excel-Datei kopiert, die in R importiert, die Spaltennamen mit colnamen() umbenannt und dann mit rowMeans() die Mittelwerte berechnet u. in eine neue Spalte eingefügt, mit apply() den "NA-Zähler installiert ( ), die zuvielen NAs gelöscht und würde zum Schluss mit data.entry() den Datensatz händisch bearbeiten und die Mittelwerte in die übrig NAs einfügen. Ich denke, das genügt. Ihr seid super!bigben hat geschrieben: ↑Di Mai 21, 2019 4:49 pmSchonmal als Hinweis, bis Du Jörgs Frage beantwortest:
Zur Imputation: Das kann man von Hand stricken. Stellt sich die Frage, ob man nicht langfristig besser ein Package benutzt, das ausgereifte Funktionen enthält: https://www.analyticsvidhya.com/blog/20 ... ng-values/Code: Alles auswählen
bsp <- data.frame(name = c("Alpha", "Bravo", "Delta", "Echo", "Foxtrott", "Golf", "Hotel"), s1 = c(NA, 1:5, NA), s2 = c(NA, 1:4, NA, NA), s3 =c(NA, NA, NA, .1, 22, NA, NA)) print(bsp) bsp$imputeValue <- rowMeans(bsp[,c("s1", "s2", "s3")], na.rm = TRUE) # Mittelwert für später bsp$NAzaehler <- apply(bsp, 1, function(x) sum(is.na(x))) # wieviele NA in dieser Zeile print(bsp) nicht_mehr_als_zwei_NA <- bsp[bsp$NAzaehler<=2,] # lösche die mit zuvielen NA print(nicht_mehr_als_zwei_NA)
LG,
Bernhard
Liebe Grüße
Lis
PS: Die NA-Werte im Datensatz mit data.entry() händisch durch den Mittelwert zu ersetzen zerschiesst mir aus irgendeinem Grund den Datensatz. Ich hab sie jetzt in der Excel-Datei bearbeitet und neu eingelesen.
Zuletzt geändert von Lis91 am Di Mai 21, 2019 7:25 pm, insgesamt 1-mal geändert.
Re: Missings identifizieren und damit umgehen
Es ging mir auch nicht darum, die NA-Werte zu sehen, sondern um den Namen und den Typ der Spalten des Dataframes zu kennen.
Ohne Spaltennamen lässt sich schlecht mit einem Dataframe hantieren.
Verbleiben wir so:
Du verzichtest darauf, die Struktur des Dataframes zu zeigen,
und ich verzichte darauf, irgend etwas Konkretes in diesem Zusammenhang zu programmieren.
Ohne Spaltennamen lässt sich schlecht mit einem Dataframe hantieren.
Verbleiben wir so:
Du verzichtest darauf, die Struktur des Dataframes zu zeigen,
und ich verzichte darauf, irgend etwas Konkretes in diesem Zusammenhang zu programmieren.
Lis91 hat geschrieben: ↑Di Mai 21, 2019 5:13 pmHuhu! Der Output wird leider nur verkürzt dargestellt. Die betreffenden Variablen sind im Output nicht zu sehen. Die meisten anderen Variablen sind allerdings "num"(erisch?).jogo hat geschrieben: ↑Di Mai 21, 2019 4:34 pm Hallo Lis,
kannst Du bitte die Struktur des Dataframes zeigen?
Das ist der Output vonGruß, JörgCode: Alles auswählen
str(DeinDataframe)
Re: Missings identifizieren und damit umgehen
Hallo Jörg! Ich glaube, das war ein Missverständnis. Ich hab doch auch garnicht gesagt, dass es Dir darum geht, die NA-Werte zu sehen (abgesehen davon steht da doch auch garnichts drin!?). Wenn ich str(MeinDataframe) eingebe, kommt eine Auflistung der Variablen mit den dazugehörigen Werten. Die Variablen/Spalten, die ich gerne ich einem extra Datensatz extrahiert hätte, sind leider nicht zu sehen (ganz unten steht "list output truncated"). Ich denke aber, die sieht auch in etwa so aus:jogo hat geschrieben: ↑Di Mai 21, 2019 6:14 pm Es ging mir auch nicht darum, die NA-Werte zu sehen, sondern um den Namen und den Typ der Spalten des Dataframes zu kennen.
Ohne Spaltennamen lässt sich schlecht mit einem Dataframe hantieren.
Verbleiben wir so:
Du verzichtest darauf, die Struktur des Dataframes zu zeigen,
und ich verzichte darauf, irgend etwas Konkretes in diesem Zusammenhang zu programmieren.
Lis91 hat geschrieben: ↑Di Mai 21, 2019 5:13 pmHuhu! Der Output wird leider nur verkürzt dargestellt. Die betreffenden Variablen sind im Output nicht zu sehen. Die meisten anderen Variablen sind allerdings "num"(erisch?).jogo hat geschrieben: ↑Di Mai 21, 2019 4:34 pm Hallo Lis,
kannst Du bitte die Struktur des Dataframes zeigen?
Das ist der Output vonGruß, JörgCode: Alles auswählen
str(DeinDataframe)
Code: Alles auswählen
$ Var_021 : num 1 1 3 2 1 2 NA 1 2 2 ...
Liebe Grüße
Lis
Re: Missings identifizieren und damit umgehen
Hallo Lis,
zugegeben, das sieht wirklich seltsam aus bei Dir.
Inzwischen bin ich mir auch nicht mehr sicher, ob das Objekt überhaupt ein Dataframe ist.
Das lässt sich aber mit der Funktion class() herausfinden:wäre hochinteressant.
Grüße, Jörg
zugegeben, das sieht wirklich seltsam aus bei Dir.
Inzwischen bin ich mir auch nicht mehr sicher, ob das Objekt überhaupt ein Dataframe ist.
Das lässt sich aber mit der Funktion class() herausfinden:
Code: Alles auswählen
class(seltsamesObjekt)
Grüße, Jörg
Re: Missings identifizieren und damit umgehen
jogo hat geschrieben: ↑Di Mai 21, 2019 8:29 pm Hallo Lis,
zugegeben, das sieht wirklich seltsam aus bei Dir.
Inzwischen bin ich mir auch nicht mehr sicher, ob das Objekt überhaupt ein Dataframe ist.
Das lässt sich aber mit der Funktion class() herausfinden:wäre hochinteressant.Code: Alles auswählen
class(seltsamesObjekt)
Grüße, Jörg
Code: Alles auswählen
class(df)
[1] "data.frame"
Re: Missings identifizieren und damit umgehen
hm, ok, sieht ganz so aus. Aber warum sieht dann der Output von str(df) nicht so ähnlich aus wie bei dem Dataframe iris?
Kannst Du bitte mal spaßeshalber noch den Output von
zeigen?
Ansonsten hilft nur: viewtopic.php?f=20&t=11 bzw. https://stackoverflow.com/questions/596 ... le-example
Gruß, Jörg
Code: Alles auswählen
> str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
Code: Alles auswählen
length(df)
Ansonsten hilft nur: viewtopic.php?f=20&t=11 bzw. https://stackoverflow.com/questions/596 ... le-example
Gruß, Jörg