Umwandlung Factor zu hex

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

Moderatoren: EDi, jogo

Antworten
teichbader
Beiträge: 5
Registriert: So Okt 20, 2019 9:30 pm

Umwandlung Factor zu hex

Beitrag von teichbader »

Guten Tag,

habe ein Textfile, bestehend aus hex-Zahlen (!) mit der Funktion read.table eingelesen.
Nun möchte ich mir z.B. ein Histogramm anzeigen lassen.
Der Datentyp im Stream ist aber Factor. Wie kann ich R sagen, dass ich die Werte als Hex-Zahlen interpretiert haben möchte?

Kann ich ein Histogramm der Hex-Zahlen anzeigen lassen, oder muss ich die Werte vorher in decimal umwandeln? Aber wie?

> str(a)
'data.frame': 10000 obs. of 1 variable:
$ V1: Factor w/ 256 levels "00","01","02",..: 169 57 142 147 239 100 78 169 119 155 ...
> hist(a)
Fehler in hist.default(a) : 'x' muss numerisch sein


Im Internet fand ich zum Beispiel:
a$V1 <- as.numeric(as.character(a$V1))
aber das führt zu:
Warnmeldung:
NAs durch Umwandlung erzeugt

Sieht so aus, als ob nun nur die Hex-Zahlen umgewandelt wurden, die aus reinen Ziffern bestehen, die Buchstaben ("ff") wurden ignoriert.
Wie bekomme ich ein Histogramm der Daten hin?

Danke schonmal,
Teichbader
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Umwandlung Factor zu hex

Beitrag von jogo »

Hallo Teichbader,

bitte zeig mal, wie Du die Daten einliest.
Bestimmt kannst Du den Parameter stringsAsFactors=FALSE gut einsetzen.
Man muss vielleicht den character-Vektor etwas ummodeln; anschließend kann man strtoi() verwenden.

Code: Alles auswählen

example(strtoi)
Bitte lies den Hilfetext zu der Funktion gründlich :!:

Gruß, Jörg
teichbader
Beiträge: 5
Registriert: So Okt 20, 2019 9:30 pm

Re: Umwandlung Factor zu hex

Beitrag von teichbader »

Hallo Jörg,

also strtoi(x,16L) interpretiert die chr Werte als Hex-Werte, auch ohne ein 0x davor.
Funktioniert - Danke!

Code: Alles auswählen

dat  <-  read.table ("D:/data.txt",header=FALSE,stringsAsFactors=FALSE)
> str(dat)
'data.frame':   10000 obs. of  1 variable:
 $ V1: chr  "a8" "38" "8d" "92" ...

> dat$V1[0:4]
[1] "a8" "38" "8d" "92"
> b <- strtoi(dat$V1,16L);

> b[0:4]
[1] 168  56 141 146
> 


Gruß Teichbader
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Umwandlung Factor zu hex

Beitrag von jogo »

... und ein etwaiges Faktorargument wird implizit in char umgewandelt:

Code: Alles auswählen

x <- as.factor(c("00", "0f", "14"))
strtoi(x, base=16)
Gruß, Jörg
p.s.:
Die Indizierung beginnt in R mit 1.
Deshalb werden Dir bei ...[0:4] nur vier Elemente angezeigt und nicht fünf.
Du kannst es auch prüfen mit length(b)
teichbader
Beiträge: 5
Registriert: So Okt 20, 2019 9:30 pm

Re: Umwandlung Factor zu hex

Beitrag von teichbader »

Danke!
Antworten