Seite 1 von 1

Variablengruppierung,Tabelle

Verfasst: Do Mai 20, 2021 7:27 pm
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

Re: Variablengruppierung,Tabelle

Verfasst: Fr Mai 21, 2021 12:34 pm
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

Re: Variablengruppierung,Tabelle

Verfasst: Fr Mai 21, 2021 1:14 pm
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

Re: Variablengruppierung,Tabelle

Verfasst: Fr Mai 21, 2021 5:19 pm
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

Re: Variablengruppierung,Tabelle

Verfasst: Sa Mai 22, 2021 10:02 pm
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).

Re: Variablengruppierung,Tabelle

Verfasst: Mi Mai 26, 2021 10:28 pm
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!