Tabelle umordnen

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

Moderatoren: EDi, jogo

Antworten
seb
Beiträge: 4
Registriert: So Apr 10, 2022 3:19 pm

Tabelle umordnen

Beitrag von seb »

Hallo mal wieder,

ich habe folgendes Problem. Um die rmcorr-Funktion (im rmcorr-Paket) nutzen zu können, muss ich meine Tabelle komplett umordnen. Meine eigentliche Tabelle sieht etwa so aus, wie die aus diesem Beispiel:

bsp <- data.frame(VP = 1:10,
wert1a = round(rnorm(10),2),
wert1b = sample(c(1,2,3,4,5,6,7), 10, TRUE),
wert2a = round(rnorm(10),2),
wert2b = sample(c(1,2,3,4,5,6,7), 10, TRUE))
print(bsp)

Jetzt brauche ich aber folgendes Format:

VP Wert a b
1 1
1 2
2 1
2 2

Also eine VP steht nicht mehr nur in einer Zeile mit vier Werten, sondern in zwei Zeilen mit jeweils zweien. Jemand eine Idee, wie das gehen könnte?

Viele Grüße
Sebastian
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Tabelle umordnen

Beitrag von Athomas »

Es gibt in R diverse Möglichkeiten der Konvertierung zwischen dem „wide“ und dem „long“-Format – such einfach mal danach!

Da mein Leib-und-Magen-Paket „data.table“ ist, nehme ich es auch hier…

Das Doofe (wie ich finde) an Deinem Beispiel ist, dass Du nicht nur eine (wie man es häufig hat), sondern gleich zwei Angaben in deinen Variablennamen codiert hast.

Um das zu verarbeiten, habe ich die data.table erstmal völlig abgeschmolzen, dann die beiden verschränkten Angaben extrahiert und damit die „Tabelle“ neu zusammengesetzt.

Code: Alles auswählen

library(data.table)
bsp <- data.table(VP = 1:10,
                  wert1a = round(rnorm(10),2),
                  wert1b = sample(c(1,2,3,4,5,6,7), 10, TRUE),
                  wert2a = round(rnorm(10),2),
                  wert2b = sample(c(1,2,3,4,5,6,7), 10, TRUE))
bsp

# die ursprüngliche "Tabelle" wird zunächst komplett "geschmolzen"
bsp.ganzlang <- melt(bsp, id.vars="VP", variable.name="tempo")

# die beiden versteckten Variablen aus dem Namen extrahiert
bsp.ganzlang[  , ":="(Wert=substr(tempo,5,5), Art=substr(tempo,6,6))]
bsp.ganzlang[  , tempo:=NULL]

# das Ganze wieder passend zusammengesetzt und aufbereitet
bsp.halblang <- dcast(bsp.ganzlang, VP + Wert ~ Art, value.var="value")
bsp.halblang[  , Wert:=as.integer(Wert)]
Zuletzt geändert von Athomas am Di Apr 19, 2022 10:07 am, insgesamt 1-mal geändert.
seb
Beiträge: 4
Registriert: So Apr 10, 2022 3:19 pm

Re: Tabelle umordnen

Beitrag von seb »

Hey, vielen Dank!

Ich verstehe das zwar noch nicht ganz, aber es funktioniert auf jeden Fall. Ich werde das heute oder morgen mal studieren und dann versuchen, auf meinen eigentlichen Datensatz anzuwenden. Ich dachte, wenn ich einen fiktiven Datensatz nehme, ist mein Problem erst mal anschaulicher zu erklären. Blöderweise habe ich nach meinem Experiment (Bachelorarbeit) die Daten in dieser Struktur vorliegen, so dass ich sie eben umformen muss. Manche Operationen in R übersteigen momentan noch meinen Horizont, deshalb ist mir das eine echt große Hilfe!

Viele Grüße
Sebastian
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Tabelle umordnen

Beitrag von Athomas »

Wenn das auf Deine Daten nicht genau passt, bekommen wir es auf jeden Fall passend gemacht :D !
Diese Umstrukturiererei ist eine der ganz starken Seiten von R - da gibt es diverse gut funktionierende Varianten.
Und data.table ist auch bei großen Mengen noch sauschnell...

Manche "Operationen" in R sind relativ schwer verständlich, weil sie so mächtig und flexibel sind.
Antworten