Seite 1 von 2

Klasse der eingelesenen Daten im txt Format falsch

Verfasst: Mo Jan 20, 2020 11:23 am
von mula
Hallo liebes Forum,
ich muss für meine Bachlorarbeit eine heatmap mit R erstellen.
Dazu wollte ich eine Tabelle mit Dezimalzahlen im txt Format in R einlesen. Soweit hat das alles geklappt.
R kann aber nicht mit meinen Daten rechnen. Mir wird angezeigt, dass meine Daten nicht numerisch sind. Wenn ich mit class() und typeof() abfrage welcher Klasse und welchem Typ meine Daten zugeordnet werde spuckt R immer "character" aus. Ich weiß nicht warum, ich habe auch schon viel gegoogelt, aber noch keine Lösung gefunden. Habt ihr vielleicht eine Idee was das Problem ist?

Re: Klasse der eingelesenen Daten im txt Format falsch

Verfasst: Mo Jan 20, 2020 11:29 am
von ruedi_br
Hängt am Import: wahrscheinlich der falsche Dezimaltrenner.
Grüße
Ruedi

Re: Klasse der eingelesenen Daten im txt Format falsch

Verfasst: Mo Jan 20, 2020 11:46 am
von jogo
Hallo mula,

kannst Du bitte wenigstens zeigen, wie Du die Daten einliest und wie das Ergebnis von

Code: Alles auswählen

str(DeinDataframe)
aussieht :?:
Gruß, Jörg

Re: Klasse der eingelesenen Daten im txt Format falsch

Verfasst: Mo Jan 20, 2020 1:57 pm
von mula
Ja, ich versuchs mal.

Ich lese die Daten so ein:

Code: Alles auswählen

grains_txt <- read.table("//Volumes/NO NAME/Kanarenprojekt/Korngrößenanalyse/Lanzarote/Lanz_I/Korngrößen_P1.txt", dec=",",stringsAsFactors = FALSE)

Code: Alles auswählen

> str("grains")
 chr "grains"
P.S.: Ich habe gerade erst angefangen mich in R einzuarbeiten und steige bei vielen Sachen noch nicht durch...

Re: Klasse der eingelesenen Daten im txt Format falsch

Verfasst: Mo Jan 20, 2020 2:07 pm
von jogo
mula hat geschrieben: Mo Jan 20, 2020 1:57 pm Ich lese die Daten so ein:

Code: Alles auswählen

grains_txt <- read.table("//Volumes/NO NAME/Kanarenprojekt/Korngrößenanalyse/Lanzarote/Lanz_I/Korngrößen_P1.txt", dec=",",stringsAsFactors = FALSE)

Code: Alles auswählen

> str("grains")
 chr "grains"
hier ist das Ergebnis klar. Bitte liefere das Ergebnis von:

Code: Alles auswählen

str(grains_txt)
P.S.: Ich habe gerade erst angefangen mich in R einzuarbeiten und steige bei vielen Sachen noch nicht durch...
ja, die Anfangshürde ist nicht klein.

Gruß, Jörg

Re: Klasse der eingelesenen Daten im txt Format falsch

Verfasst: Mo Jan 20, 2020 2:34 pm
von mula
ah ja!

Code: Alles auswählen

> str(grains_txt)
'data.frame':	24 obs. of  81 variables:
 $ X        : Factor w/ 24 levels "P1-1","P1-10",..: 1 12 18 19 20 21 22 23 24 2 ...
 $ X0.058   : int  0 0 0 0 0 0 0 0 0 0 ...
 $ X0.067   : int  0 0 0 0 0 0 0 0 0 0 ...
 $ X0.076   : Factor w/ 2 levels "0","0,121881533": 1 1 1 1 2 1 1 1 1 1 ...
 $ X0.087   : Factor w/ 2 levels "0","0,236177078": 1 1 1 1 2 1 1 1 1 1 ...
 $ X0.1     : Factor w/ 2 levels "0","0,410149058": 1 1 1 1 2 1 1 1 1 1 ...
 $ X0.115   : Factor w/ 3 levels "0","0,232177138",..: 1 1 1 1 3 1 2 1 1 1 ...
 $ X0.131   : Factor w/ 10 levels "0","0,140419885",..: 1 1 1 8 10 1 9 1 1 1 ...
 $ X0.15    : Factor w/ 13 levels "0","0,10241106",..: 1 1 1 11 12 1 13 1 1 2 ...
 $ X0.172   : Factor w/ 15 levels "0","0,111377955",..: 1 1 1 13 14 1 15 1 3 4 ...
 $ X0.197   : Factor w/ 17 levels "0","0,054957375",..: 1 1 1 15 16 2 17 1 5 6 ...
 $ X0.226   : Factor w/ 21 levels "0","0,11210864",..: 1 5 1 19 20 6 21 3 9 10 ...
 $ X0.259   : Factor w/ 21 levels "0","0,19418818",..: 1 5 1 20 19 6 21 3 9 8 ...
 $ X0.296   : Factor w/ 21 levels "0","0,29728809",..: 1 5 1 20 19 8 21 3 9 6 ...
 $ X0.339   : Factor w/ 21 levels "0","0,38437248",..: 1 6 1 19 17 18 20 3 8 5 ...
 $ X0.389   : Factor w/ 22 levels "0","0,15605304",..: 1 7 2 20 19 22 13 4 8 5 ...
 $ X0.445   : Factor w/ 23 levels "0","0,1200876",..: 1 10 3 20 21 23 7 4 9 6 ...
 $ X0.51    : Factor w/ 24 levels "0","0,051149175",..: 1 10 17 21 22 24 2 4 5 8 ...
 $ X0.584   : Factor w/ 17 levels "0","0,111419163",..: 1 1 14 10 15 17 1 1 1 1 ...
 $ X0.669   : Factor w/ 16 levels "0","0,103424963",..: 1 1 13 6 14 16 1 1 1 1 ...
 $ X0.766   : Factor w/ 15 levels "0","0,050958945",..: 2 1 10 4 14 15 1 1 1 1 ...
 $ X0.877   : Factor w/ 14 levels "0","0,111613275",..: 3 1 1 2 13 14 1 1 1 1 ...
 $ X1.005   : Factor w/ 14 levels "0","0,118404608",..: 2 1 1 3 13 14 1 1 1 1 ...
 $ X1.151   : Factor w/ 15 levels "0","0,111410243",..: 2 1 1 4 14 15 1 1 1 3 ...
 $ X1.318   : Factor w/ 16 levels "0","0,051458543",..: 2 1 1 5 15 16 3 1 1 4 ...
 $ X1.51    : Factor w/ 16 levels "0","0,122917113",..: 1 1 1 5 15 16 3 1 1 4 ...
 $ X1.729   : Factor w/ 16 levels "0","0,139974998",..: 1 1 1 5 15 16 3 1 1 4 ...
 $ X1.981   : Factor w/ 16 levels "0","0,157534585",..: 1 1 1 5 14 16 4 1 1 3 ...
 $ X2.269   : Factor w/ 16 levels "0","0,173087363",..: 1 1 1 5 14 16 4 1 1 3 ...
 $ X2.599   : Factor w/ 16 levels "0","0,187135033",..: 1 1 1 5 14 16 4 1 1 3 ...
 $ X2.976   : Factor w/ 16 levels "0","0,19666738",..: 1 1 1 5 14 16 4 1 1 3 ...
 $ X3.409   : Factor w/ 16 levels "0","0,204192918",..: 1 1 1 5 14 16 4 1 1 3 ...
 $ X3.905   : Factor w/ 16 levels "0","0,20870824",..: 1 1 1 5 14 16 4 1 1 3 ...
 $ X4.472   : Factor w/ 16 levels "0","0,21272186",..: 1 1 1 4 14 16 5 1 1 3 ...
 $ X5.122   : Factor w/ 16 levels "0","0,216233778",..: 1 1 1 4 14 16 5 1 1 3 ...
 $ X5.867   : Factor w/ 16 levels "0","0,220247398",..: 1 1 1 4 15 16 5 1 1 3 ...
 $ X6.72    : Factor w/ 17 levels "0","0,05227664",..: 1 1 1 6 16 17 5 1 2 4 ...
 $ X7.697   : Factor w/ 17 levels "0","0,1055586",..: 1 1 1 6 16 17 5 1 2 4 ...
 $ X8.816   : Factor w/ 17 levels "0","0,10706658",..: 1 1 1 6 16 17 5 1 2 4 ...
 $ X10.097  : Factor w/ 18 levels "0","0,10706658",..: 1 1 1 7 17 18 6 1 2 5 ...
 $ X11.565  : Factor w/ 18 levels "0","0,1055586",..: 1 1 1 7 17 18 6 1 2 5 ...
 $ X13.246  : Factor w/ 17 levels "0","0,128406838",..: 1 1 1 10 15 17 5 1 1 4 ...
 $ X15.172  : Factor w/ 17 levels "0","0,1359014",..: 1 1 1 12 14 17 4 1 1 5 ...
 $ X17.377  : Factor w/ 17 levels "0","0,141397413",..: 1 1 1 13 14 17 4 1 1 5 ...
 $ X19.904  : Factor w/ 17 levels "0","0,14248351",..: 1 1 1 14 13 17 4 1 1 5 ...
 $ X22.797  : Factor w/ 17 levels "0","0,118903493",..: 1 1 1 14 13 16 4 1 1 8 ...
 $ X26.111  : Factor w/ 16 levels "0","0,136401038",..: 1 1 1 13 12 15 3 1 1 7 ...
 $ X29.907  : Factor w/ 16 levels "0","0,129406113",..: 1 1 1 13 12 15 3 1 1 10 ...
 $ X34.255  : Factor w/ 16 levels "0","0,120412638",..: 1 1 1 13 12 15 3 1 1 10 ...
 $ X39.234  : Factor w/ 16 levels "0","0,110419888",..: 1 1 1 13 11 15 3 1 1 10 ...
 $ X44.938  : Factor w/ 16 levels "0","0,104424238",..: 1 1 1 12 11 16 3 1 1 8 ...
 $ X51.471  : Factor w/ 15 levels "0","0,163476775",..: 1 1 1 11 8 15 2 1 1 7 ...
 $ X58.953  : Factor w/ 17 levels "0","0,1039246",..: 1 3 1 11 10 17 4 1 1 8 ...
 $ X67.523  : Factor w/ 20 levels "0","0,051675358",..: 5 6 4 14 12 20 8 1 1 11 ...
 $ X77.34   : Factor w/ 20 levels "0","0,124909375",..: 8 11 5 14 12 20 7 1 1 10 ...
 $ X88.583  : Factor w/ 21 levels "0","0,148891975",..: 16 15 10 14 12 21 7 1 1 9 ...
 $ X101.46  : Factor w/ 24 levels "0,11796047","0,1533113",..: 23 22 21 19 15 24 10 1 2 12 ...
 $ X116.21  : Factor w/ 24 levels "0,22192563","0,26188586",..: 24 23 22 20 13 21 9 1 2 10 ...
 $ X133.103 : Factor w/ 24 levels "0,429188613",..: 24 23 22 21 15 20 9 2 4 11 ...
 $ X152.453 : Factor w/ 24 levels "0,696994313",..: 24 23 22 21 17 20 10 3 6 14 ...
 $ X174.616 : Factor w/ 24 levels "1,1151909","1,26018079",..: 24 23 22 21 17 20 8 7 10 15 ...
 $ X200     : Factor w/ 24 levels "1,720251913",..: 4 3 2 24 22 20 11 13 17 19 ...
 $ X229.075 : Factor w/ 24 levels "12,82185795",..: 3 2 1 24 23 20 12 17 19 18 ...
 $ X262.376 : Factor w/ 24 levels "12,77706524",..: 3 1 2 24 23 14 12 18 21 19 ...
 $ X300.518 : Factor w/ 24 levels "11,06958181",..: 1 2 3 21 19 9 13 22 24 17 ...
 $ X344.206 : Factor w/ 24 levels "10,55896156",..: 18 21 23 15 8 3 12 1 2 20 ...
 $ X394.244 : Factor w/ 24 levels "10,10282583",..: 8 11 16 7 6 5 14 4 3 24 ...
 $ X451.556 : Factor w/ 24 levels "10,93386032",..: 7 8 9 6 5 4 12 2 1 21 ...
 $ X517.2   : Factor w/ 24 levels "1,649699415",..: 8 9 10 7 1 2 13 3 23 20 ...
 $ X592.387 : Factor w/ 24 levels "0,88199748","1,248032025",..: 4 8 9 3 1 2 12 23 22 18 ...
 $ X678.504 : Factor w/ 24 levels "0,490054793",..: 4 5 6 3 1 2 13 22 18 17 ...
 $ X777.141 : Factor w/ 24 levels "0,160822935",..: 4 5 6 3 1 2 13 20 14 15 ...
 $ X890.116 : Factor w/ 22 levels "0","0,338227508",..: 2 3 4 1 1 1 11 18 13 15 ...
 $ X1019.515: Factor w/ 19 levels "0","0,488227075",..: 1 1 1 1 1 1 8 16 10 12 ...
 $ X1167.725: Factor w/ 18 levels "0","0,35088555",..: 1 1 1 1 1 1 7 14 10 12 ...
 $ X1337.481: Factor w/ 13 levels "0","0,325449163",..: 1 1 1 1 1 1 2 9 5 7 ...
 $ X1531.914: Factor w/ 7 levels "0","0,323901298",..: 1 1 1 1 1 1 1 3 1 1 ...
 $ X1754.613: Factor w/ 4 levels "0","0,486149723",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ X2009.687: Factor w/ 2 levels "0","0,332758575": 1 1 1 1 1 1 1 1 1 1 ...
 $ X2301.841: int  0 0 0 0 0 0 0 0 0 0 ...
 $ X2500    : int  0 0 0 0 0 0 0 0 0 0 ...
ist ist ein ziemlich großer dataframe...

Re: Klasse der eingelesenen Daten im txt Format falsch

Verfasst: Mo Jan 20, 2020 2:52 pm
von bigben
Ist das wirklich das Ergebnis genau des obigen read.table Aufrufs und erscheint beim read.table-Aufruf wirklich keine Fehlermeldung?

Re: Klasse der eingelesenen Daten im txt Format falsch

Verfasst: Mo Jan 20, 2020 3:07 pm
von jogo
Vielleicht ist es das Ergebnis für den Dataframe nach dem Einlesen mit:

Code: Alles auswählen

grains_txt <- read.table("//Volumes/NO NAME/Kanarenprojekt/Korngrößenanalyse/Lanzarote/Lanz_I/Korngrößen_P1.txt", dec=",")
(bzw. sogar mit stringsAsFactors = TRUE)
-- sonst gäbe es nicht die Faktoren, sondern nur char
Hierzu muss mula auf alle Fälle konsistente Informationen liefern.

Aber wenn schon diese Parameterangabe nicht zuverlässig ist, ist es dann die Angabe von dec="," :?:

Ansonsten hilft nur:
reinschauen in die Datei und nach den Teilen suchen, die selbst bei dec="," verhindern, dass die Zahlen erkannt werden.
Ich nehme in solchen Fällen einen einfachen Texteditor. (Bitte auch die letzte Zeile gründlich analysieren - nicht, dass dort irgendein Schruz noch am Ende rumhängt.)

mula, kannst Du uns die Datei Korngrößen_P1.txt als Anhang liefern? (oder sonstwie auf einem Fileserver/Cloudspeicher)

Gruß, Jörg

Re: Klasse der eingelesenen Daten im txt Format falsch

Verfasst: Mo Jan 20, 2020 3:25 pm
von bigben
Hallo Jörg,

mich stört folgende Zeile:

Code: Alles auswählen

$ X0.076   : Factor w/ 2 levels "0","0,121881533": 1 1 1 1 2 1 1 1 1 1 ...
Das ist eine vollständige Aufzählung aller 2 level. Wo bleibt da noch Raum für Einträge, die zu einem Factor führen?

LG,
Bernhard

Re: Klasse der eingelesenen Daten im txt Format falsch

Verfasst: Mo Jan 20, 2020 3:31 pm
von jogo
Hallo Bernhard,

stimmt, guter Treffer!
(ich habe es nur bis zu der vagen Vermutung geschafft, dass auch dec="," nicht zu dem output von str(..) passt.)

Wenn wirklich so eingelesen wird:

Code: Alles auswählen

grains_txt <- read.table("//Volumes/NO NAME/Kanarenprojekt/Korngrößenanalyse/Lanzarote/Lanz_I/Korngrößen_P1.txt", dec=",")
dann sollte die Spalte $X0.076 auf alle Fälle numerisch sein.

Gruß, Jörg
p.s.: ich habe da noch einen Verdacht bezüglich der Spaltennamen ...

Code: Alles auswählen

read.table(header=TRUE, text=
"0,3 0,04
0,7 0,88
3 5")