Seite 1 von 1

dataframe umwandeln

Verfasst: Do Feb 04, 2021 11:34 am
von steven_y
Ich möchte einen dataframe transformieren, hier der Input:

Code: Alles auswählen

key_1 <- c('a','a','a','b')
key_2 <- c('x','y','z','x')
value_1 <- c(22,33,44,55)

df <- data.frame(key_1,key_2,value_1)
Es ist sehr umständlich, den gewünschten Output zu beschreiben, aussehen soll es wie folgt.

Code: Alles auswählen

key_1 <- c('a','a','a','b')
key_2 <- c('x','y','z','x')
value_x <- c(22,22,22,55)
value_y <- c('na',33,'na','na')
value_z <- c('na','na',44,'na')
df2 <- data.frame(key_1,key_2,value_x,value_y,value_z)
Ich hatte gedacht, mit tidyverse::pivot_wider zu arbeiten. Dabei wird aber nicht berücksichtigt, dass value_x auch für die Werte y und z für key_2 erhalten bleiben soll.

Re: dataframe umwandeln

Verfasst: Do Feb 04, 2021 11:56 am
von bigben
steven_y hat geschrieben: Do Feb 04, 2021 11:34 amEs ist sehr umständlich, den gewünschten Output zu beschreiben, aussehen soll es wie folgt.
Wir wollen Dir natürlich keine Umstände machen, aber hilfreich wäre es schon.

Ich verstehe z. B. nicht, warum df2[2,3] == 22 ist, aber df2[3,4] != 33

Gleichzeitig bin ich einigermaßen sicher, dass die deutsche Sprache Möglichkeiten bietet, Regeln für diese Umorganisation auszudrücken.

Gruß,
Bernhard

Re: dataframe umwandeln

Verfasst: Do Feb 04, 2021 12:27 pm
von steven_y
Besten Dank für die schnelle Rückmeldung.

Die Idee ist, dass key_2 Kategorien beschreibt. key_2 = x ist dabei die erste Ebene einer Kategorisierung, y und z die zweite Ebene einer Kategorisierung. Daher sollten die Werte für x auch für die nachfolgende Ebene vorhanden sein.

Da y und z auf der gleichen Ebene sind, df2[3,4] != 33 gilt diese Aussage. Es ist etwas unglücklich von mir gewesen, y und z zu verwenden, es hätte auch nur y getan.

Einigermaßen verständlich?

Re: dataframe umwandeln

Verfasst: Do Feb 04, 2021 12:56 pm
von bigben
Verständlich aber knapp. Darf man Annahmen bezgl key_1 machen? Ist der immer genau dreimal ein Buchstabe und dann ein neuer oder macht das, was es will?

Re: dataframe umwandeln

Verfasst: Do Feb 04, 2021 1:57 pm
von steven_y
Die Anzahl der Ausprägungen von key_2 variiert. Es kann also sein, dass es für key_1 = a drei Ausprägungen für key_2 gibt, key_1 = b hat eine Ausprägung (key_2) und key_1 = c hat fünf Ausprägungen (key_2). Es gibt also 3 Reihen mit key_1 = a, 1 Reihe mit key_1 = b und 5 Reihen mit key_1 = c

Re: dataframe umwandeln

Verfasst: Mo Feb 08, 2021 8:49 am
von steven_y
Möglicherweise kann ich ja alle Zeilen füllen, das werde ich mal probieren.

Allerdings entfernt pivot_wider alle anderen Spalten. Lässt sich das verhindern?

Re: dataframe umwandeln

Verfasst: Mo Feb 08, 2021 9:00 am
von steven_y
Wenn ich den DF mit pivot_wider umwandele, verschwinden alle Spalten, die nicht in

id_cols, names_from oder values_from enthalten sind. Lässt sich das ändern?