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

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

Moderatoren: EDi, jogo

Antworten
Jörg
Beiträge: 25
Registriert: Mi Nov 09, 2016 2:58 pm

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

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

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

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Jörg
Beiträge: 25
Registriert: Mi Nov 09, 2016 2:58 pm

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

Beitrag von Jörg »

Hallo Bernhard,

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

Herzliche Grüße
jörg
Antworten