Seite 1 von 1

Nicht-numerische Daten zu Kategorien zusammenfassen

Verfasst: Di Aug 13, 2019 11:59 am
von MadLu
Hallo zusammen,

ich bin R Anfängerin und versuche Werte innerhalb einer Spalte zu kategorisieren, um im Endeffekt bessere Association Rules zu erhalten.

Es geht um den googleplaystore Datensatz von kaggle, der die Spalte Installs enthällt. Innerhalb der Spalte gibt es viele numerische Kategorien (z.B. "1,000+"). Ich habe mir überlegt, eine neue Spalte ("new") zu erstellen und über die ifelse Funktion die Werte festzulegen. Das klappt leider überhaupt nicht.
Ich bin über jeden eurer Hinweise sehr dankbar!

Code: Alles auswählen

# 1 Einlesen des Datensatzes
app<-read.csv("googleplaystore.csv", header=TRUE, sep = ",", colClasses="factor")
class(app)
str(app)
summary(app)

# Zusammenfügen Werte in neue Kategorien

app$new <- 
      ifelse(app$Installs <- "1,000+"|app$Installs <-"500+"|app$Installs <-"100+"|app$Installs <-"50+"|app$Installs <-"10+","sehr niedrig",
      ifelse(app$Installs <- "10,000+"|app$Installs <- "5,000+","niedrig",
      ifelse(app$Installs <- "100,000+"|app$Installs <-"50,000+","gering",
      ifelse(app$Installs <- "1,000,000+"|app$Installs <-"500,000+","höher",
      ifelse(app$Installs <- "10,000,000+"|app$Installs <-"5,000,000+","hoch",
      ifelse(app$Installs <- "100,000,000+"|app$Installs <-"50,000,000+","sehr hoch")))))

Re: Nicht-numerische Daten zu Kategorien zusammenfassen

Verfasst: Di Aug 13, 2019 12:10 pm
von bigben
Hallo madlu,

ifelse ist eine tolle Funktion und auch eine sehr schnelle, wenn man große Datensätze anzupassen hat. Dennoch ist es nicht immer die einfachste und damit Anfängerfreundlichste Funktion. Schau Dir mal meinen Beitrag in diesem Thread zum Thema umcodierem an, ob Du den Ansatz leichter für Dich anpassen kannst:
viewtopic.php?f=9&t=1454&p=7562#p7562

LG,
Bernhard

Re: Nicht-numerische Daten zu Kategorien zusammenfassen

Verfasst: Di Aug 13, 2019 12:56 pm
von jogo
Hallo MadLu,

willkommen im Forum!
Ein wesentlicher Fehler steckt in z.B.

Code: Alles auswählen

app$Installs <- "1,000+"
Es muss heißen:

Code: Alles auswählen

app$Installs == "1,000+"
denn Du möchtest ja testen/vergleichen.

Bei so vielen Fallunterscheidungen würde ich wohl eine kleine Tabelle anlegen und merge() arbeiten lassen.
Aber auch recode() aus dem Paket car ist hübsch.

schau mal (für merge()):

Code: Alles auswählen

InstKat <- read.table(header=TRUE, sep=',', ,stringsAsFactors = FALSE, text= 
'Installs, Kat
"1,000+","sehr niedrig"
"500+","sehr niedrig"
"100+","sehr niedrig"
"50+","sehr niedrig"
"10+","sehr niedrig"
"10,000+","niedrig"
"5,000+","niedrig"
"100,000+","gering"
"50,000+","gering"
"1,000,000+","höher"
"500,000+","höher"
"10,000,000+","hoch"
"5,000,000+","hoch"
"100,000,000+","sehr hoch"
"50,000,000+","sehr hoch"')
und dann

Code: Alles auswählen

merge(app, InstKat)
Hier ist noch die Handarbeitsvariante:

Code: Alles auswählen

app$new <- "neueKat"
app$new[app$Installs %in% c("1,000+", "500+", "100+", "50+", "10+")] <- "sehr niedrig"
app$new[app$Installs %in% c("10,000+", "5,000+")] <- "niedrig"
app$new[app$Installs %in% c("1,000,000+", "500,000+")] <- "höher"
app$new[app$Installs %in% c("10,000,000+", "5,000,000+")] <- "hoch"
app$new[app$Installs %in% c("100,000,000+", "50,000,000+" )] <- "sehr hoch"
etwa so kann es mit recode() aussehen (!! ungetestet!!):

Code: Alles auswählen

library("car")
app$new <- recode(app$Installs, 'c("1,000+", "500+", "100+", "50+", "10+")="sehr niedrig"; c("10,000+", "5,000+")="niedrig"; 
      c("1,000,000+", "500,000+")] <- "höher"; c("10,000,000+", "5,000,000+")="hoch"; c("100,000,000+", "50,000,000+")="sehr hoch"; else="xxx"')
Gruß, Jörg

Re: Nicht-numerische Daten zu Kategorien zusammenfassen

Verfasst: Mi Aug 14, 2019 11:31 am
von MadLu
VIelen Dank euch beiden für die Hilfe!!! Habe das Problem nun mit der Handarbeitsvariante von Jörg gelöst, klappt einwandfrei :)