Gesamte Zeile löschen, wenn in allen 7 relevanten Spalten "NA"
Verfasst: Di Mai 02, 2023 11:16 am
Hallo liebes Forum,
ich muss für meine Masterarbeit mit R rechnen und habe einen riesigen Datensatz im Long-Format.
Ich würde gerne alle Zeilen löschen, in denen alle 7 relevanten Variablen ein NA aufweisen (nicht aber, wenn es in nur in manchen davon ist). Ich kriege aber leider den Befehl dazu nicht hin. Meine eigentliche Idee war, einfach folgenden Befehl zu verwenden:
data[ ! ( ( data$Variable1 ==1 & data$Variable2 ==1 )) , ]
und das "nicht aufnehmen, wenn Variable 1 und Variable 2 = 1 sind" für mich umzuändern zu "nicht aufnehmen, wenn Variablen 1-7 keinen Wert haben", allerdings habe ich Probleme damit, das NA in den Code einzubinden. Es funktioniert weder mit ==NA noch ==is.na oder =is.na
(Mein Code war z. B. wie folgt:
data_long2[ ! ( ( data_long$CommunionScore = is.na & data_long$Agency_Score = is.na & data_long$ElectabilityScore = is.na & data_long$Likeliness_to_vote=is.na & data_long$Likeliness_City_Council =is.na & data_long$Likeliness_Schoolboard=is.na & data_long$Likeliness_House_of_Representatives=is.na )) , ]
Hat jemand eine Idee für mich, wie ich den Code abändern kann oder mit welchem alternativen Befehlen ich das gleiche erreichen kann?
Falls es relevant ist, hier noch ein paar mehr Infos zum Code.
Ich habe 674 Versuchspersonen und es gab insgesamt 32 Targets, die auf 7 Variablen bewertet wurden, jede Versuchsperson hat allerdings nur eine randomisierte Auswahl von 8 Targets gesehen. Da es ein Longformat ist, hat jede der 32 Targets untereinander eine Zeile pro Versuchsperson, also Target 1 hat 674 Zeilen, dann kommt Target 2 mit 674 Zeilen etc. bis Target 32. Da allerdings jedes Target nur von einem Viertel der Versuchspersonen bewertet wurde (da diese ja nur 8/32 gesehen haben), sind Dreiviertel der Zeilen leer. Diese würde ich gerne löschen. Da es aber auch vorkommt, dass eine Versuchsperson ein Target zwar bewertet hat, aber nicht alle 7 Variablen sondern z.B. nur 6 beantwortet hat, kann ich Zeilen nicht wegen eines einzelnen NA löschen lassen. Mein Plan wäre daher, irgendwie eine If-Schleife zu haben, also dass Zeilen nur dann gelöscht werden, wenn in allen 7 relevanten Variablen ein NA steht, weil das bedeutet, dass das Target von diesen Versuchspersonen nicht bewertet wurde (und nicht, dass lediglich einzelne Fragen zum Target nicht beantwortet wurden).
Vielen lieben Dank für eure Hilfe!!
Liebe Grüße
Lea
ich muss für meine Masterarbeit mit R rechnen und habe einen riesigen Datensatz im Long-Format.
Ich würde gerne alle Zeilen löschen, in denen alle 7 relevanten Variablen ein NA aufweisen (nicht aber, wenn es in nur in manchen davon ist). Ich kriege aber leider den Befehl dazu nicht hin. Meine eigentliche Idee war, einfach folgenden Befehl zu verwenden:
data[ ! ( ( data$Variable1 ==1 & data$Variable2 ==1 )) , ]
und das "nicht aufnehmen, wenn Variable 1 und Variable 2 = 1 sind" für mich umzuändern zu "nicht aufnehmen, wenn Variablen 1-7 keinen Wert haben", allerdings habe ich Probleme damit, das NA in den Code einzubinden. Es funktioniert weder mit ==NA noch ==is.na oder =is.na
(Mein Code war z. B. wie folgt:
data_long2[ ! ( ( data_long$CommunionScore = is.na & data_long$Agency_Score = is.na & data_long$ElectabilityScore = is.na & data_long$Likeliness_to_vote=is.na & data_long$Likeliness_City_Council =is.na & data_long$Likeliness_Schoolboard=is.na & data_long$Likeliness_House_of_Representatives=is.na )) , ]
Hat jemand eine Idee für mich, wie ich den Code abändern kann oder mit welchem alternativen Befehlen ich das gleiche erreichen kann?
Falls es relevant ist, hier noch ein paar mehr Infos zum Code.
Ich habe 674 Versuchspersonen und es gab insgesamt 32 Targets, die auf 7 Variablen bewertet wurden, jede Versuchsperson hat allerdings nur eine randomisierte Auswahl von 8 Targets gesehen. Da es ein Longformat ist, hat jede der 32 Targets untereinander eine Zeile pro Versuchsperson, also Target 1 hat 674 Zeilen, dann kommt Target 2 mit 674 Zeilen etc. bis Target 32. Da allerdings jedes Target nur von einem Viertel der Versuchspersonen bewertet wurde (da diese ja nur 8/32 gesehen haben), sind Dreiviertel der Zeilen leer. Diese würde ich gerne löschen. Da es aber auch vorkommt, dass eine Versuchsperson ein Target zwar bewertet hat, aber nicht alle 7 Variablen sondern z.B. nur 6 beantwortet hat, kann ich Zeilen nicht wegen eines einzelnen NA löschen lassen. Mein Plan wäre daher, irgendwie eine If-Schleife zu haben, also dass Zeilen nur dann gelöscht werden, wenn in allen 7 relevanten Variablen ein NA steht, weil das bedeutet, dass das Target von diesen Versuchspersonen nicht bewertet wurde (und nicht, dass lediglich einzelne Fragen zum Target nicht beantwortet wurden).
Vielen lieben Dank für eure Hilfe!!
Liebe Grüße
Lea