Umgruppierung von Tabellen

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

Moderatoren: EDi, jogo

Antworten
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Umgruppierung von Tabellen

Beitrag 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
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Umgruppierung von Tabellen

Beitrag 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)]
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Re: Umgruppierung von Tabellen

Beitrag 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
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Umgruppierung von Tabellen

Beitrag 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 = ','))
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Umgruppierung von Tabellen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Umgruppierung von Tabellen

Beitrag 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!
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Re: Umgruppierung von Tabellen

Beitrag 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
Antworten