Variablentyp ändern

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

Moderatoren: EDi, jogo

Antworten
Luisa_33
Beiträge: 19
Registriert: Do Jun 25, 2020 3:46 pm

Variablentyp ändern

Beitrag 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
bigben
Beiträge: 2780
Registriert: Mi Okt 12, 2016 9:09 am

Re: Variablentyp ändern

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Luisa_33
Beiträge: 19
Registriert: Do Jun 25, 2020 3:46 pm

Re: Variablentyp ändern

Beitrag von Luisa_33 »

So hat es funktioniert, Danke!

Code: Alles auswählen

Inputdaten[[i]]
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Variablentyp ändern

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

Re: Variablentyp ändern

Beitrag 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)
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.
Luisa_33
Beiträge: 19
Registriert: Do Jun 25, 2020 3:46 pm

Re: Variablentyp ändern

Beitrag von Luisa_33 »

Danke, die Varianten sind auch viel kürzer :)
Antworten