Ich wäre dankbar für Vorschläge, wie ich meinen Code verbessern kann. Der zweite Versuch funktioniert und gibt die erforderliche Ausgabe, aber ich halte es für sehr mühsam. Vielleicht gibt es dafür eine einfachere Lösung.Kombinieren Sie mehrere Spalten mit NA-Werten in R, aber verwenden Sie nur NA, wenn keine der Spalten Daten enthält
Das ursprüngliche Dataset enthält 8 Spalten mit Informationen zu Bildschirmauflösungen. Jede Spalte stellt eine andere Gruppe von Fragen dar, in die die Teilnehmer nach dem Zufallsprinzip eingeteilt wurden. Dies bedeutet, dass NA eingefügt wurde, wenn die Lösungsfrage in diesem bestimmten Satz nicht gestellt wurde, obwohl der Teilnehmer sie möglicherweise in einer anderen Menge beantwortet hat.
Ich habe anonymisierter und vereinfachte Daten, um nur drei der ursprünglich acht Spalten Ich erwähne:
ID ResSet1 ResSet2 ResSet3
1 NA NA NA
2 NA NA NA
3 NA NA NA
4 NA NA NA
5 NA 1280x800 NA
6 NA NA NA
7 NA NA NA
8 NA NA NA
9 NA 1440x900 NA
10 NA NA 1366x768
11 NA NA NA
12 NA NA NA
13 NA NA NA
14 NA 1366x768 NA
15 NA NA NA
16 NA NA 1920x1080
17 NA NA NA
18 1600x1200 NA NA
19 NA NA NA
20 NA NA 1366x768
21 NA NA 1440x900
22 NA 1680x1050 NA
23 1600x900 NA NA
24 NA NA NA
25 NA NA 1920x1080
26 NA NA NA
27 NA 1440x900 NA
28 NA NA NA
29 NA NA 1600x900
30 1280x800 NA NA
Mein Ziel ist es, alle Sätze in eine Spalte namens Resolutions zu kombinieren; Markieren Sie eine bestimmte Zeile jedoch nur dann als NA, wenn sie NA-Werte in allen Sätzen/Spalten enthält. Wenn ein Satz die Auflösung enthält, sollten nur Auflösungswerte in die Spalte geschrieben werden.
Ich versuchte das folgende Vertrauen auf dplyr und tidyr Pakete, hier sind meine zwei Versuche.
Der erste Versuch, mutieren und paste0 mit:
x = test %>% mutate(Resolution = paste0(ResSet1, ResSet2, ResSet3))
Dies führt in etwa wie folgt: (Ausgabe von Originaldaten)
x$Resolution
1] "NANANANANANANA1366x768" "NANA1440x900NANANANANA" "NANANANANANA1344x840NA" "NANANANA1366x768NANANA"
[5] "NA1280x800NANANANANANA" "NANANANANANANA1366x768" "NANANANA1366x768NANANA" "NANANANANANA1536x864NA"
[9] "NA1440x900NANANANANANA" "NANANA1366x768NANANANA" "NANANANANANANA1280x800" "NANANANANA1366x768NANA"
[13] "NANA1408x792NANANANANA" "NA1366x768NANANANANANA" "NANANANANA1920x1080NANA" "NANANA1920x1080NANANANA"
ich nicht geklappt habe Figur, wie so etwas wie rm zu tun .na Funktion während der Verwendung von paste0, also in meinem zweiten Versuch mit unite; Ich habe NA-Strings durch "" ersetzt und leere Zellen durch die richtige NA ersetzt.
x2 = test %>% unite(Resolution, ResSet1, ResSet2, ResSet3,
remove = TRUE, sep = "") %>%
mutate(Resolution = str_replace_all(Resolution, "NA", "")) %>%
mutate(Resolution = ifelse(Resolution == "", NA, Resolution))
Ergebnis wie folgt aussehen: (Ausgabe von Originaldaten)
x2$Resolution
"1366x768" NA "1280x800" "1366x768" "1366x768" "1366x768" NA "1440x900"
Das ist eigentlich das, was ich erreichen müssen; Die Lösung scheint mir jedoch nicht sehr elegant zu sein, und vielleicht gibt es dafür einen einfacheren Ansatz.
Vielen Dank für Anregungen.