Informationen zweier Spalten in einer Spalte zusammenfassen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
kosa
Beiträge: 27
Registriert: Mo Sep 02, 2019 6:47 pm

Informationen zweier Spalten in einer Spalte zusammenfassen

Beitrag 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!
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
kosa
Beiträge: 27
Registriert: Mo Sep 02, 2019 6:47 pm

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Beitrag 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 :)
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Beitrag von jogo »

Code: Alles auswählen

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

Gruß, Jörg
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
ruedi_br
Beiträge: 159
Registriert: Do Mär 01, 2018 3:53 pm

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Beitrag von ruedi_br »

Wie wäre es mit der banalen Variante, auf <1 abzuprüfen?
VG
Ruedi
fortune(111)
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Beitrag 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
kosa
Beiträge: 27
Registriert: Mo Sep 02, 2019 6:47 pm

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Beitrag 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 :)
kosa
Beiträge: 27
Registriert: Mo Sep 02, 2019 6:47 pm

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Beitrag 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?
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Informationen zweier Spalten in einer Spalte zusammenfassen

Beitrag 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
Antworten