Seite 1 von 1

Variablentyp ändern

Verfasst: So Sep 20, 2020 11:55 am
von Luisa_33
Hallo,

ich habe folgendes Problem:
Ich möchte meinen Variablentyp ändern.
In einer Schleife sollen alle Spalten durchlaufen werden und der Variablentyp character zu factor geändert werden.
Leider bekomme ich es nur hin, wenn ich den Spaltenname direkt benenne, siehe Code unten.

Code: Alles auswählen

head(Inputdaten)
i <- 1
for(i in seq(ncol(Inputdaten))){
  if(is.character(Inputdaten$Text) == TRUE){
    Inputdaten$Text = as.factor(Inputdaten$Text)
  }
}
Dieses Problem möchte ich jedoch umgehen und stattdessen so etwas haben:

Code: Alles auswählen

head(Inputdaten)
i <- 1
for(i in seq(ncol(Inputdaten))){
  if(is.character(Inputdaten[i]) == TRUE){
    Inputdaten[i] = as.factor(Inputdaten[i])
  }
}
Leider funktioniert das so nicht. Hat jemand eine Idee, wie ich das Problem lösen kann oder ist das nicht möglich?

Liebe Grüße,
Luisa_33

Re: Variablentyp ändern

Verfasst: So Sep 20, 2020 12:24 pm
von bigben
Hallo,
Ich habe gerade keinen Computer zur Hand, denke aber, dass doppelte eckige Klammern funktionieren sollten. Also

Code: Alles auswählen

Inputdaten[[i]]
Oder

Code: Alles auswählen

Inputdaten[,i]
Das

Code: Alles auswählen

i <- 1
brauchst Du nicht.

LG,
Bernhard

Re: Variablentyp ändern

Verfasst: So Sep 20, 2020 4:33 pm
von Luisa_33
So hat es funktioniert, Danke!

Code: Alles auswählen

Inputdaten[[i]]

Re: Variablentyp ändern

Verfasst: Mo Sep 21, 2020 8:42 am
von jogo
Hallo Luisa,

man kann aber auch mit dem Argument stringsAsFactors= der Funktion data.frame() rumspielen:

Code: Alles auswählen

dat <- data.frame(a=letters[1:5], f=letters[6:10], k=1:5) # Standard stringsAsFactors = TRUE
## explizit:
dat <- data.frame(a=letters[1:5], f=letters[6:10], k=1:5, stringsAsFactors = TRUE)
dat <- data.frame(a=letters[1:5], f=letters[6:10], k=1:5, stringsAsFactors = FALSE)

# Umwandlung
dat <- data.frame(a=letters[1:5], f=letters[6:10], k=1:5, stringsAsFactors = FALSE)
dat2 <- as.data.frame(as.list(dat), stringsAsFactors = TRUE)
str(dat2)
anders herum geht der Trick allerdings nicht:

Code: Alles auswählen

dat3 <- as.data.frame(as.list(dat2), stringsAsFactors = FALSE) # trotzdem Faktoren
Es bedarf eines etwas größeren Aufwandes:

Code: Alles auswählen

i <- sapply(dat3, is.factor)
dat3[i] <- lapply(dat3[i], as.character)
str(dat3)
Gruß, Jörg

Re: Variablentyp ändern

Verfasst: Mo Sep 21, 2020 8:06 pm
von EDi
Ich nutze für etwas gerne ?dplyr::mutate_if:

Code: Alles auswählen

library(dplyr)
dat <- data.frame(a=letters[1:5], f=letters[6:10], k=1:5, stringsAsFactors = FALSE)
str(dat)
dat2 <- mutate_if(dat, is.character, as.factor)
str(dat2)

Re: Variablentyp ändern

Verfasst: So Sep 27, 2020 4:48 pm
von Luisa_33
Danke, die Varianten sind auch viel kürzer :)