Seite 1 von 1

Von lang nach breit, Ausprägungen einer Charactervariablen gruppiert zusammenfassen

Verfasst: Di Aug 25, 2020 3:53 pm
von Jörg
Hallo Zusammen,

ich habe einen Datensatz, in dem jede Person eine ID hat und jede Person wiederum mehrere Beobachtungen (Anzahl der Beobachtungen variiert über die Person) einer Variablen V aufweist.

Das ganze sieht vereinfacht so aus:

Code: Alles auswählen

ID<-c(1,1,1,2,2,3)
V<-c("a","a","b","a","c","d")
df1<-tibble(ID,V)
Nun möchte ich vom einem langen in ein breites Datenformat wecheln. Pro Person (ID) soll es nur noch eine Beobachtung geben, alle Ausprägungen dieser Person sollen in einer(!) neuen Variablen V2 zusammengefasst werden, wobei die einzelnen Ausprägungen durch einen "_" verbunden sein sollen.
Die Zieltabelle im Beispiel sähe so aus:

Code: Alles auswählen

ID2<-c(1,2,3)
V2<-c("a_a_b","a_c","d")
df2<-tibble(ID2,V2)
Über spread() sollte es einfach gehen, aber ich komme nicht darauf, wie.

Herzlichen Dank für Eure Hilfe.

Jörg

Re: Von lang nach breit, Ausprägungen einer Charactervariablen gruppiert zusammenfassen

Verfasst: Di Aug 25, 2020 4:03 pm
von bigben
Hallo!

Ich bin sicher, es kommt noch eine tidyverse-idiomatische Antwort von den anderen. Solange als Zwischenlösung vielleicht

Code: Alles auswählen

library(tibble)

ID<-c(1,1,1,2,2,3)
V<-c("a","a","b","a","c","d")
df1<-tibble(ID,V)

result <- tibble(
             V2 = tapply(df1$V, df1$ID, function(x) paste0(x, collapse = "_")),
             ID2 = tapply(df1$ID, df1$ID, function(x) x[1])
           )
result
Das Hadleyverse schreitet immer voran und Code mit spread zu erstellen wird übrigens von Hadley nicht mehr empfohlen:
pivot_wider() is an updated approach to spread(), designed to be both simpler to use and to handle more use cases. We recommend you use pivot_wider() for new code; spread() isn't going away but is no longer under active development.
aus: https://tidyr.tidyverse.org/reference/pivot_wider.html

LG,
Bernhard

Re: Von lang nach breit, Ausprägungen einer Charactervariablen gruppiert zusammenfassen

Verfasst: Di Aug 25, 2020 4:27 pm
von Jörg
Hallo Bernhard,

vielen Dank für beides: die Lösung und den Hinweis.

Herzliche Grüße
jörg