Seite 1 von 1

Informationen zweier Spalten in einer Spalte zusammenfassen

Verfasst: Di Apr 21, 2020 11:41 am
von kosa
Hallo ihr Lieben,

ich habe ein kleines Datenbereinigungsproblem. Ich hatte eine Umfrage geschaltet und einen Reihenfolgefaktor für bestimmte Konstrukte eingebaut, wodurch ich zwei Fragebogengruppen habe. In meiner Ergebnistabelle wurden daher die Ergebnisse einer Variable, die inhaltlich das absolut gleiche fragt, in zwei verschiedenen Spalten je nach Gruppenzugehörigkeit abgespeichert.

Hier ein nachvollziehbares Beispiel:

Code: Alles auswählen

dat <- data.frame(
  id = c(1,2,3,4,5,6,7,8),
  group = c(1,2,1,2,2,1,1,2),
  item1_1 = c(4,NA,5,NA,NA,3,2,NA), #Antworten zu Item1 der Gruppe 1
  item1_2 = c(NA,1,NA,3,2,NA,NA,2), #Antworten zu Item1 der Gruppe 2
  item2_1 = c(1,NA,1,NA,NA,2,6,NA), #Antworten zu Item2 der Gruppe 1
  item1_2 = c(NA,2,NA,6,7,NA,NA,3) #Antworten zu Item2 der Gruppe 2
)

> dat
  id group item1_1 item1_2 item2_1 item1_2.1
1  1     1       4      NA       1        NA
2  2     2      NA       1      NA         2
3  3     1       5      NA       1        NA
4  4     2      NA       3      NA         6
5  5     2      NA       2      NA         7
6  6     1       3      NA       2        NA
7  7     1       2      NA       6        NA
8  8     2      NA       2      NA         3
Wie man sieht wurde Item 1 je nach Gruppenzugehörigkeit auf zwei Spalten verteilt. Bei Item1_1 gibt es Leerstellen für Teilnehmer, die in Gruppe 2 waren und für Item2_1 gibt es Leerstellen für Teilnehmer, die in Gruppe 1 waren. Das gleiche Muster habe ich für Item 2.

Wie kann ich diese Spalten jeweils für Item 1 und Item 2 zusammenführen? Hat da jemand eine Idee?

Vielen Dank!

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Verfasst: Di Apr 21, 2020 12:25 pm
von bigben
Wenn Du sicher bist, dass eine Antwort entweder in item1_1 oder in item1_2 steht und es sicher nicht vorkommen kann, dass in beiden eine Zahl steht, geht das einfach als Summe beider Spalten:

Code: Alles auswählen

dat <- data.frame(
  id = c(1,2,3,4,5,6,7,8),
  group = c(1,2,1,2,2,1,1,2),
  item1_1 = c(4,NA,5,NA,NA,3,2,NA), #Antworten zu Item1 der Gruppe 1
  item1_2 = c(NA,1,NA,3,2,NA,NA,2), #Antworten zu Item1 der Gruppe 2
  item2_1 = c(1,NA,1,NA,NA,2,6,NA), #Antworten zu Item2 der Gruppe 1
  item2_2 = c(NA,2,NA,6,7,NA,NA,3) #Antworten zu Item2 der Gruppe 2
)

dat$item1 <- rowSums(dat[,c("item1_1", "item1_2")], TRUE)
dat$item2 <- rowSums(dat[,c("item2_1", "item2_2")], TRUE)
head(dat)

Code: Alles auswählen

> head(dat)
  id group item1_1 item1_2 item2_1 item2_2 item1 item2
1  1     1       4      NA       1      NA     4     1
2  2     2      NA       1      NA       2     1     2
3  3     1       5      NA       1      NA     5     1
4  4     2      NA       3      NA       6     3     6
5  5     2      NA       2      NA       7     2     7
6  6     1       3      NA       2      NA     3     2
LG,
Bernhard

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Verfasst: Di Apr 21, 2020 1:57 pm
von kosa
super! vielen Dank. Das hat einwandfrei funktioniert.

Nur habe ich jetzt das Problem, dass es den Wert 0 gibt. Wie kann ich diese Werte in NAs umwandeln?

Viele Grüße :)

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Verfasst: Di Apr 21, 2020 2:01 pm
von jogo

Code: Alles auswählen

x[x==0] <- NA
(Indizierung mit einem logischen Vektor)

Gruß, Jörg

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Verfasst: Di Apr 21, 2020 2:11 pm
von bigben
Hallo Jörg,

mich gruselt es immer ein wenig, wenn ich '==' zusammen mit Fließkommazahlen sehe, auch wenn ich nicht wirklich weiß, ob da in diesem Fall ein Risiko besteht. Wäre es sicherer, den Vergleich mit 0L zu machen?

Code: Alles auswählen

x[x==0L] <- NA
:?:

LG,
Bernhard

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Verfasst: Di Apr 21, 2020 2:18 pm
von ruedi_br
Wie wäre es mit der banalen Variante, auf <1 abzuprüfen?
VG
Ruedi

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Verfasst: Di Apr 21, 2020 2:25 pm
von jogo
bigben hat geschrieben: Di Apr 21, 2020 2:11 pm mich gruselt es immer ein wenig, wenn ich '==' zusammen mit Fließkommazahlen sehe, auch wenn ich nicht wirklich weiß, ob da in diesem Fall ein Risiko besteht.
Bis jetzt sah in den Beispielen oben alles nach integer aus. In den bisherigen Beispielen war auch keine 0 zu sehen.

Gruß, Jörg

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Verfasst: Di Apr 21, 2020 3:10 pm
von kosa
Vielen Dank ihr beiden für den Input!

Es handelt sich tatsächlich um integere Skalenwerte zwischen 1 und 7, weshalb die erste vorgeschlagene Variante auf jeden Fall für diesen speziellen Datensatz funktioniert.

Euer kleiner Austausch hat dennoch geholfen, um in Zukunft auf diese Feinheiten zu achten. Mir war das nämlich nicht bewusst. Vielen Dank euch!

Viele Grüße :)

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Verfasst: Di Apr 21, 2020 3:14 pm
von kosa
Darf ich trotzdem noch etwas Fragen. Um 0 in NA umzuwandeln, muss ich ja den Befehl auf jede Spalte einzeln anwenden.

Gibt es da eine Möglichkeit, das für mehrere spezifisch ausgewählt Spalten zu tun?

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Verfasst: Di Apr 21, 2020 3:43 pm
von jogo

Code: Alles auswählen

B <- BOD
B[2,2] <- 0
B[4,1] <- 0
B

B[B==0] <- NA
B
Hallo kosa,

ich sehe in Deinem Beispiel keine 0. Kannst Du bitte wieder ein zu Deiner Frage passendes reproduzierbares Beispiel liefern?

Gruß, Jörg