Fehlercode: ´x´must be numeric

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

Moderatoren: EDi, jogo

Exterion
Beiträge: 12
Registriert: Di Mai 25, 2021 2:34 pm

Re: Fehlercode: ´x´must be numeric

Beitrag von Exterion »

Hallo Bernhard,

ich habe die Befehle eingegeben, allerdings treten bei mir ein paar Fehler auf.

Code: Alles auswählen

#Umwandlung, um die Daten "Geschlecht" als "integer" zu definieren
table(daten$Geschlecht)
daten$Geschlecht_i <- as.integer(daten$Geschlecht)

head(daten$Geschlecht_i)
levels(daten$Geschlecht_i) <- c("m", "f")
head(daten$Geschlecht_i)
Ich habe es als "integer" definiert, da ich mit dem "Factor" diese Fehlermeldung erhalten habe:

> levels(daten$Geschlecht) <- c("m", "f")
Fehler in `levels<-.factor`(`*tmp*`, value = c("m", "f")) : number of levels differs

Dann bin ich wie folgt fortgefahren:

Code: Alles auswählen

#Filtern von Teilen eines Datensatzes
Geschlecht_Maenner <- subset(daten, Geschlecht_i == "m")
head(Geschlecht_Maenner$Geschlecht_i)

Geschlecht_Frauen <- subset(daten, Geschlecht_i == "f")
head(Geschlecht_Frauen$Geschlecht_i)

table(Geschlecht_Maenner$Bestellhaeufigkeit)
Hier erhalte ich aber einen Datensatz mit " 0 obs. of 11 variables". Und daher bekomme ich halt auch als Ergebnis nur 0 raus ohne Daten. Was ist schief gelaufen?
DS subset.PNG
Vielen Dank wieder im Voraus!

Viele Grüße
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Fehlercode: ´x´must be numeric

Beitrag von bigben »

Hallo Exterion,
Exterion hat geschrieben: Do Jun 03, 2021 2:10 pmda ich mit dem "Factor" diese Fehlermeldung erhalten habe:

> levels(daten$Geschlecht) <- c("m", "f")
Fehler in `levels<-.factor`(`*tmp*`, value = c("m", "f")) : number of levels differs
In dem Datensatz, den Du hier eingestellt hast, gab es nur Männer und Frauen, in Deinem auch einen divers. Dementsprechend habe ich ein Beispiel mit zwei levels, Dein vollständiger Datensatz hat aber drei. Daher müsstest Du wohl drei neue Levels zuweisen. Ansonsten schlage ich vor, dass Du mit subset die diverse herausfilterst, bevor Du mit dem Geschlecht rechnest.

Dann bin ich wie folgt fortgefahren:

Code: Alles auswählen

#Filtern von Teilen eines Datensatzes
Geschlecht_Maenner <- subset(daten, Geschlecht_i == "m")
Wenn Geschlecht integer ist, dann kann es nicht "m" sein. Deshalb bleibt ein leeres Subset mit 0 observations.

HTH,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Exterion
Beiträge: 12
Registriert: Di Mai 25, 2021 2:34 pm

Re: Fehlercode: ´x´must be numeric

Beitrag von Exterion »

Hallo Bernhard,

vielen Dank für die schnelle Hilfe! Ich habe nicht gesehen, dass das Geschlecht ja noch "divers" enthält. Dieses habe ich jetzt herausgenommen und nun funktioniert es so, wie ich es möchte!
# Dabei kann man mehrere Bedingungen durch ein logisches UND verknüpfen mit `&`
# beziehungsweise durch ein logisches ODER mit `|`:
mein.subset <- subset(daten,
Bestellhaeufigkeit == "11 - 20 Mal" | Bestellhaeufigkeit == "mehr als 20 Mal")
head(mein.subset)
table(mein.subset$Bestellhaeufigkeit)
Ich verstehe zwar soweit die Befehle, aber ledier stehe ich noch etwas auf dem Schlauch.. Was genau kann man damit konkret darstellen bzw. was sagt dieser "Filter" genau aus? Werden hier nun alle Daten aller Teilnehmer gefiltert, die in der Umfrage bei der Bestellhäufigkeit "11 - 20" und "mehr als 20" angegeben haben?

Viele Grüße
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Fehlercode: ´x´must be numeric

Beitrag von bigben »

Nicht 'und' sondern 'oder.
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Exterion
Beiträge: 12
Registriert: Di Mai 25, 2021 2:34 pm

Re: Fehlercode: ´x´must be numeric

Beitrag von Exterion »

Ich habe die Korrelation auch die Regressionsanalyse fertig. Ich habe nur noch eine Frage zur Interpretation der Ergebnisse. Ich habe folgende Befehle eingegeben:

Die Frage in der Umfrage lautet: "Tätigen Sie seit den negativen Erfahrungen weniger Bestellungen im Internet?"
--> Als Antwortmöglichkeit gibt es "JA" und "NEIN". Also in R dann die Variable BestellhauefigkeitNegErf mit 1 = JA und 2 = NEIN.

Code: Alles auswählen

#Korrelation BestellhaefigkeitNegErf / Risikowahrnehmung
cor.test(BestellhaeufigkeitNegErf_i, Risikowahrnehmung_gewandelt, method = "spearman")
## Ergebnis: Geringe Korrelation zwischen BestellhaefigkeitNegErf und Risikowahrnehmung (Signifikant)
## Ergebnis: -0.31 --> Wenn nach negativen Erfahrungen die Bestellhäufigkeit nicht sinkt (also steigt), so würde die Risikowahrnehmung sinken
die nächsten beiden Variablen sind Verlustheohe und wieder BestellhaefigkeitNegErf. Die Verlustheohe ist in R mit 1 = Unter 100 EUR, 2 = Zwischen 100 und 500 EUR und 3 = Über 500 EUR definiert.

Code: Alles auswählen

#Korrelation Verlusthoehe / BestellhaeufigkeitNegErf
cor.test(Verlusthoehe_gewandelt, BestellhaeufigkeitNegErf_i, method = "spearman")
## Ergebnis: Geringe Korrelation zwischen Verlusthoehe und BestellhaefigkeitNegErf (Signifikant)
## Ergebnis: -0.31 --> Umso geringer die Verlusthoehe, so bestellen die Nutzer nicht weniger
Und die letzte Interpretation der Frage aus der Umfrage: "Treffen Sie nach erleben von negativen Erfahrungen mehr Sicherheitsmaßnahmen als vorher?" Wieder mit JA und NEIN zu beantworten, in R wieder 1 = JA und 2 = NEIN.

Code: Alles auswählen

#Korrelation BestellhaeufigkeitNegErf / SicherheitsmassnahmenNegErf
cor.test(BestellhaeufigkeitNegErf_i, SicherheitsmassnahmenNegErf_i, method = "spearman")
## Ergebnis: Geringe Korrelation zwischen BestellhaefigkeitNegErf und SicherheitsmassnahmenNegErf (Signifikant)
## Ergebnis: 0.22 --> Wenn die Nutzer nicht weniger bestellen (also mehr bestellen), treffen sie höhere Sicherheitsmaßnahmen
Sind die Interpretation von mir so richtig oder denke ich in die falsche Richtung? Oder ist so eine genaue Interpretation nur aus der Regressionsanalyse machbar und daher kann man nur die Höhe der Korrelation bestimmen?

Vielen Dank schon mal wieder im Voraus!

Viele Grüße
Antworten