Ganze Zahlen werden als numerisch und nicht als integer erkannt

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
L_ynn
Beiträge: 2
Registriert: So Aug 16, 2020 1:31 pm

Ganze Zahlen werden als numerisch und nicht als integer erkannt

Beitrag von L_ynn »

Hallo,
im Rahmen einer Seminararbeit nutze R und bin noch sehr unerfahren mit diesem Programm.

Meinen Datensatz lese ich mittels einer ExcelTabelle ein.

Ich habe einen Datensatz mit 9 Variablen, die aber alle als numerisch num erkannt werden:

'data.frame': 156 obs. of 9 variables:
$ year : num 2017 2017 2017 2017 2017 ...
$ kw : num 1 2 3 4 5 6 7 8 9 10 ...
$ mailinc : num 9312 13028 13247 12861 12395 ...
$ mailproc : num 8825 11504 12623 12875 11787 ...
$ callinc : num 1051 1514 1575 1551 1544 ...
$ calllost : num 60 182 377 210 232 265 248 379 229 318 ...
$ lostcallq: num 0.0571 0.1202 0.2394 0.1354 0.1503 ...
$ holidays : num 0.847 0 0 0 0.12 ...
$ classhol : num 1 4 4 4 4 4 4 4 4 4 ...

Bis auf die Variablen lostcallq und holidays sind dies jedoch alles Ganze Zahlen, also integer int.

Was mache ich möglichweise falsch?
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Ganze Zahlen werden als numerisch und nicht als integer erkannt

Beitrag von EDi »

Bereit dir das irgendwelche Probleme in deiner Analyse(z.b. beim Speicherverbrauch)?

Wenn ja, kannst du mit as.integer umwandeln .
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.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Ganze Zahlen werden als numerisch und nicht als integer erkannt

Beitrag von bigben »

In der Tat sieht R erstmal alles als Fließkommazahl an:

Code: Alles auswählen

> typeof(5)
[1] "double"
Während man andernsorts vielleicht 5.0 schreiben müsste, um etwas als Fließkommazahl zu markieren, muss man in R ein 'L' anhängen, um etwas als integer zu kennzeichnen:

Code: Alles auswählen

> typeof(5L)
[1] "integer"
Tatsächlich macht es in R kaum je ein Problem, wenn auch als Integer gemeinte Zahlen als floating point hinterlegt werden. Während EDi oben vorschlägt, abzuwarten und nur im unwahrscheinlichen Fall eines Problems umzuwandeln würde ich zu großzügigem Umwandeln am Anfang raten. Mir hilft es gedanklich, wenn ganzzahlige Dinge ganzzahlig und realskalierte Werte real sind und Faktoren Faktoren sind.

Fließkommazahlen haben beispielsweise diese bekannte Problem, dass man sich auf den Gleichheitsoperator '==' nicht verlassen kann.

Code: Alles auswählen

> sqrt(2)^2
[1] 2
> sqrt(2)^2 == 2
[1] FALSE
ich versuche daher wachsam zu sein, dass ich Fließkommazahlen möglichst nie mit '==' vergleiche was aber nur Sinn macht, wenn Ganzzahlen auch als integer hinterlegt sind. Bei kann man '==' mit gutem Gewissen verwenden.

Man verbringt nach dem Einlesen ja ohnehin etwas Zeit damit, den Datentyp zu kontrollieren. Dann kann man auch schnell ein paar Korrekturen vornehmen.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
L_ynn
Beiträge: 2
Registriert: So Aug 16, 2020 1:31 pm

Re: Ganze Zahlen werden als numerisch und nicht als integer erkannt

Beitrag von L_ynn »

bigben hat geschrieben: So Aug 16, 2020 4:04 pm
Tatsächlich macht es in R kaum je ein Problem, wenn auch als Integer gemeinte Zahlen als floating point hinterlegt werden. Während EDi oben vorschlägt, abzuwarten und nur im unwahrscheinlichen Fall eines Problems umzuwandeln würde ich zu großzügigem Umwandeln am Anfang raten. Mir hilft es gedanklich, wenn ganzzahlige Dinge ganzzahlig und realskalierte Werte real sind und Faktoren Faktoren sind.
Wie würde denn beispielsweise der Befehl lauten, wenn ich die genannten Variablen als int darstellen möchte?

Im Internet dazu finde ich nur

Code: Alles auswählen

as.integer(x)
aber damit kann ich nicht viel anfangen.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Ganze Zahlen werden als numerisch und nicht als integer erkannt

Beitrag von bigben »

Hier ein mögliches Vorgehen mit eigenem Beispieldatensatz:

Code: Alles auswählen

bsp <- data.frame(id = c(1,2,3,4,5,6,7,8,9,0),
                  a = c(100, 103, 205, 99, 44, 34, 28, 45, 100, 101), 
                  c = rnorm(10))
str(bsp)

bsp$id <-  as.integer(bsp$id)
bsp$a <- as.integer(bsp$a)

str(bsp)
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten