Variablengruppierung,Tabelle

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
Studentpsych
Beiträge: 13
Registriert: Di Apr 06, 2021 4:07 pm

Variablengruppierung,Tabelle

Beitrag von Studentpsych »

Hallo liebe Community,
ich hätte eine Frage zur Variablengruppierung in einer Tabelle. Eine Spalte (Variable .id) enthält die Nummer der Versuchspersonen (kodiert: P1.csv = Versuchsperson 1, P2.csv = Versuchsperson 2…). Mein Ziel ist, dass ich mehrere bestimmte Versuchspersonen zu Gruppen zusammenfassen möchte. Dafür würde ich gerne in derselben Tabelle eine neue Spalte (Gruppenvariable) erstellen, welche z.B. den Wert 1 immer bei P1.csv und P2.csv hat und den Wert 2 bei P3.csv und P4.csv. Weiß jemand vielleicht einen R-Befehl, wie sich dieses Problem lösen lässt?

Hier ein Screenshot von der Tabelle:
Bild

Ich habe die Tabelle mit einem automatischen Einlesebefehl erstellt, welcher im angegebenen Verzeichnis jede einzelne CSV-Datei einliest und zu einer großen Tabelle zusammenfügt. Deshalb kommen die "komischen" Werte Px.csv zustande, da der Name der Datei als Wert genommen wird.

Hier nochmal der Einlesebefehl:

Code: Alles auswählen

library("plyr")
paths <- dir("C:/Users/RobinAOE/Desktop/", pattern = "\\.csv$", full.names = TRUE)
names(paths) <- basename(paths)
datengesamt <- ldply(paths, read.csv, stringsAsFactors = FALSE)
Viele Grüße,
Robin
Dateianhänge
Screenshot_2.png
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Variablengruppierung,Tabelle

Beitrag von jogo »

Hallo Robin,

wieviele Personen gibt es denn? ... wahrscheinlich mehr als 9, richtig?
Ich würde das mit regulären Ausdrücken angehen und bei Bedarf anschließend nach numerisch konvertieren.

Gruß, Jörg
Studentpsych
Beiträge: 13
Registriert: Di Apr 06, 2021 4:07 pm

Re: Variablengruppierung,Tabelle

Beitrag von Studentpsych »

Hallo Jörg,
danke für deine Antwort. Es sind insgesamt 24 Versuchspersonen und diese sollen 3 Gruppen zugewiesen werden, 8 Personen pro Gruppe. Ich suche nach einem Befehl wie:

Code: Alles auswählen

datengesamt$Gruppe [1] <- datengesamt$.id [P1.csv, P2.csv...]
 datengesamt$Gruppe [2] <- datengesamt$.id [P3.csv, P4.csv...]
Von der Logik her, kann ich mir vorstellen, dass es so aussehen sollte. Weiß aber nicht, wie man den genauen R-Befehl schreibt. Weißt du da vielleicht weiter?

Gruß, Robin
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Variablengruppierung,Tabelle

Beitrag von jogo »

Hallo Robin,

kannst Du dann wenigstens uns die Gruppenzugehörigkeiten vollständig liefern?
Etwa in der Form:

Code: Alles auswählen

Gruppe1 <- c(1, 2, 7, 8, 13, 14, 19, 20)
Gruppe2 <- c(3, 4, 9, 10, 15, 16, 21, 22)
Gruppe3 <- c(5, 6, 11, 12, 17, 18, 23, 24)
Ich rede ja noch nichtmal von einem reproduzierbaren Beispiel ;)
http://forum.r-statistik.de/viewtopic.php?f=20&t=11

Gruß, Jörg
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Variablengruppierung,Tabelle

Beitrag von EDi »

Anbei ein Paar Möglichkeiten die mir eingefallen sind (gibt nocht mehr!):

Code: Alles auswählen

x <- c("P1.csv", "P2.csv", "P3.csv", "P4.csv")



# switch is not vectorised...
sapply(x, function(x) switch(x,
       "P1.csv" = 1,
       "P2.csv" = 1,
       "P3.csv" = 2,
       "P4.csv" = 2))

# dplyr::case_when is vectorised
dplyr::case_when(
  x == "P1.csv" ~ 1,
  x == "P2.csv" ~ 1,
  x == "P3.csv" ~ 2,
  x == "P4.csv" ~ 2)

# with a lookup vector
map <- c("P1.csv" = 1,
  "P2.csv" = 1,
  "P3.csv" = 2,
  "P4.csv" = 2)
map[x]

# with regex & nested ifelse
id <- as.numeric(gsub("^P(\\d+)\\.csv$", "\\1", x))
ifelse(id %in% c(1, 2), 1,
ifelse(id %in% c(3, 4), 2,
NA
))
Ich nutze die lookup-vector am meisten. Die RegexLösung bringt nicht viel, außer man hat ein Struktur die man nutzen kann (z.B. ersten acht sind Gruppe 1).
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.
Studentpsych
Beiträge: 13
Registriert: Di Apr 06, 2021 4:07 pm

Re: Variablengruppierung,Tabelle

Beitrag von Studentpsych »

Hallo EDi und Jörg,
vielen Dank für eure Antworten! Dank dieser Hilfe konnte ich nun einen R-Code schreiben, welcher genau das macht, was ich wollte. Das hier hat funktioniert ("# switch is not vectorised..." - Abschnitt von EDi):

Code: Alles auswählen

x <- c(datengesamt$.id)
datengesamt$gruppe <- sapply(x, function(x) switch(x,
                                                   "P1.csv" = 1,
                                                   "P2.csv" = 1,
                                                   "P11.csv" = 3,
                                                   "P3.csv" = 2,
                                                   "P4.csv" = 2,
                                                   "P5.csv" = 3,
                                                   "P6.csv" = 3,
                                                   "P7.csv" = 1,
                                                   "P8.csv" = 1,
                                                   "P9.csv" = 2,
                                                   "P10.csv" = 2,
                                                   "P13.csv" = 1,
                                                   "P12.csv" = 3,
                                                   "P14.csv" = 1,
                                                   "P15.csv" = 2,
                                                   "P16.csv" = 2,
                                                   "P17.csv" = 3,
                                                   "P18.csv" = 3,
                                                   "P19.csv" = 1,
                                                   "P20.csv" = 1,
                                                   "P21.csv" = 2,
                                                   "P22.csv" = 2,
                                                   "P23.csv" = 3,
                                                   "P24.csv" = 3))  
Ich habe die (von Jörg) vorgeschlagene Gruppenzugehörigkeit genommen, da ich die nächsten 2 Wochen keinen zugriff auf die "wahre" Gruppenzugehörigkeit habe und diese die gleiche Struktur besitzt. Sollte aber kein Problem sein, ich kann ja jeder Zeit im R-Skript die Zahlen austauschen ;)

Vielen Dank nochmal und viele Grüße!
Antworten