Seite 1 von 1

Umgruppierung von Tabellen

Verfasst: Mo Jan 24, 2022 5:20 pm
von wbart
Hallo,
ich gebe hier mal eine Beispiel:

Code: Alles auswählen

library(dplyr)

#create table

dat <- data.frame(symbol = c("A", "B", "C", "D", "E"),
                  cond1 = c("f", "g", "f", "g", "h"),
                  cond2 = c("x", "v", "x", "v", "w")
                  )
# Umgruppierung und zählen

dat %>% 
  dplyr::group_by(cond1, cond2) %>% 
  dplyr::tally()
Die Tabelle hat folgende Form:

> dat
symbol | cond1 | cond2
A | f | x
B | g | v
C | f | x
D | g | v
E | h | w
>

Nach der Grupierung und dem Zählen erhalte ich die Anzahl der jeweiligen Kombinationen aus den zwei Konditionen
# A tibble: 3 x 3
# Groups: cond1 [3]
cond1| cond2 | n
f | x | 2
g | v | 2
h | w | 1

Jetzt möchte ich gerne die jeweiligen Symbole den Kombinationen zuordnen. Wunschvorstellung wäre:

cond1 | cond2 | n | symbol
f | x | 2 | A , C
g | v | 2 | B , D
h | w | 1 | E


Habt ihr eine Idee wie das gehen könnte?

Viele Grüße
wbart

Re: Umgruppierung von Tabellen

Verfasst: Di Jan 25, 2022 1:20 am
von Athomas
Habt ihr eine Idee wie das gehen könnte?
Ja - allerdings ohne die Tibbelei:

Code: Alles auswählen

library(data.table)

DT <- data.table(symbol=LETTERS[1:5], cond1=c("f","g","f","g","h"), cond2=c("x","v","x","v","w"))
DT[  , .(count=length(symbol), symbols=list(symbol)), by=.(cond1, cond2)]

Re: Umgruppierung von Tabellen

Verfasst: Di Jan 25, 2022 11:18 am
von wbart
Hallo Athomas,

danke für den Code. Funktioniert einwandfrei. Was bedeutet der Punkt in deinem Code? Ich entnehme deinem Text, dass du deine Daten lieber mit data.table anstand mit tidyverse manipulierst. Ich bin noch neu und suche die richtige Ausrichtung. Was spricht für data.table und gegen dplyr und co?.

VG
wbart

Re: Umgruppierung von Tabellen

Verfasst: Di Jan 25, 2022 2:35 pm
von EDi
Liest sich beides sehr ähnlich...

Code: Alles auswählen

library(dplyr)
library(data.table)
dat <- data.frame(symbol = c("A", "B", "C", "D", "E"),
                  cond1 = c("f", "g", "f", "g", "h"),
                  cond2 = c("x", "v", "x", "v", "w"))

dt <- data.table(dat)
dt[  , .(count=.N, symbols=list(symbol)), by=.(cond1, cond2)] 

dat %>%
  group_by(cond1, cond2) %>%
  summarise(count = n(),
            symbols = list(symbol))
Falls du keine list-column haben willst, kannst du auch einen string draus machen (geht genauso in data.table):

Code: Alles auswählen

dat %>%
  group_by(cond1, cond2) %>%
  summarise(count = n(),
            symbols = paste(symbol, collapse = ','))

Re: Umgruppierung von Tabellen

Verfasst: Di Jan 25, 2022 3:05 pm
von bigben
Hallo wbart,
wbart hat geschrieben: Di Jan 25, 2022 11:18 am Hallo Athomas,

danke für den Code. Funktioniert einwandfrei. Was bedeutet der Punkt in deinem Code? Ich entnehme deinem Text, dass du deine Daten lieber mit data.table anstand mit tidyverse manipulierst. Ich bin noch neu und suche die richtige Ausrichtung. Was spricht für data.table und gegen dplyr und co?.

VG
wbart
der Punkt ist in data.table eine Kurzschreibweise für list(). Der Teil ist leicht zu beantworten. Der Rest ist eine kurze Frage die sehr umfangreiche, teils auch sehr subjektive, teils auch sehr emotionale Antwortaspekte hat.
Konsensfähig sind wahrscheinlich die Aussagen
- data.table erlaubt mit wenigen Zeichen sehr komplexe Datenmanipulation für die man in dplyr sehr viel mehr Anschläge braucht. Ob man kürzeren Code als besser oder schlechter empfindet ist subjektiv.
- dplyr ist Teil des tidyverse und dieses ist im ganzen sehr viel umfassender. data.table versucht erfolgreich, bestimmte Formen der Datenmanipulation konzise und super effizient umzusetzen. Das tidyverse macht alles neu, dabei dann eben auch die Datenmanipulation.
- sowohl das klassische R plus data.table als auch das tidyverse sind beide sehr gut für die meisten Statistik- und Datenverarbeitungsaufgaben gewappnet, auch wenn immer mal eines hier oder da die Nase ein wenig vorne haben mag. Mit jedem einzelnen kann man glücklich werden und wer sich die Mühe machen will, kann auch beide lernen und beide erfolgreich kombinieren.

Du kannst in der Forumssuche mal "tidyverse" eintippen und Dir die Beiträge durchlesen, in denen das wirklich im Fließtext gefunden wird (Treffer in Code und in URLs natürlich überspringen). Bei präziseren Fragen wirst Du wahrscheinlich auch mehr Antwortbereitschaft treffen.

LG,
Bernhard

Re: Umgruppierung von Tabellen

Verfasst: Di Jan 25, 2022 5:46 pm
von Athomas
Ich entnehme deinem Text, dass du deine Daten lieber mit data.table anstand mit tidyverse manipulierst.
Wenn ich etwas brauche, was data.table kann, dann benutze ich es auch dafür!
Ich kann es nicht belegen (dafür nutze ich das tidyverse zu wenig), aber ich bin überzeugt davon, dass data.table bei großen Datenmengen wesentlich mehr PS unter der Haube hat.
Mich fasziniert immer wieder, wie schnell und elegant sich bestimmte Probleme mit "rolling joins" lösen lassen!

Nicht ohne eigenes Zutun :D habe ich mir hier den Ruf eines tidyverse-Haters erworben - was aber absolut nicht richtig ist!
Ich bin z.B. ggplot2-Intensivnutzer der (fast) ersten Stunde, und auch auf andere (Teil-) Packages des tidyverse greife ich gerne zurück.

Was mich ernsthaft stört, ist die (von mir so empfundene?) versuchte Verdrängung des "normalen" R! Viele Anfängerkurse nutzen intensiv die Features des tidyverse - auch an Stellen, an denen sie überhaupt keine Vorteile bringen. Die Anfänger werden so auf den tidyverse-Slang getrimmt und haben Schwierigkeiten mit dem Mainstream-R...

Ja, auch data.table benutzt einige nicht-Standard-Konstrukte - aber verleitet niemanden dazu, das normale R links liegen zu lassen!

Re: Umgruppierung von Tabellen

Verfasst: Mi Jan 26, 2022 9:57 am
von wbart
Vielen herzlichen Dank an alle!

Was die Frage tidyverse vs. data.table angeht. So wird man sich wohl mit beiden intensiv beschäftigen müssen :)

VG
wbart