Nicht-numerische Daten zu Kategorien zusammenfassen

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

Moderatoren: EDi, jogo

Antworten
MadLu
Beiträge: 3
Registriert: Di Aug 13, 2019 11:41 am

Nicht-numerische Daten zu Kategorien zusammenfassen

Beitrag 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")))))
Zuletzt geändert von jogo am Di Aug 13, 2019 12:02 pm, insgesamt 1-mal geändert.
Grund: Formatierung verbessert. http://forum.r-statistik.de/viewtopic.php?f=20&t=29
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Nicht-numerische Daten zu Kategorien zusammenfassen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Nicht-numerische Daten zu Kategorien zusammenfassen

Beitrag 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
MadLu
Beiträge: 3
Registriert: Di Aug 13, 2019 11:41 am

Re: Nicht-numerische Daten zu Kategorien zusammenfassen

Beitrag von MadLu »

VIelen Dank euch beiden für die Hilfe!!! Habe das Problem nun mit der Handarbeitsvariante von Jörg gelöst, klappt einwandfrei :)
Antworten