Seite 1 von 1
während des einlesens bestimmten string mit NA ersetzen
Verfasst: Mi Aug 02, 2017 7:40 am
von jessi
Hallo,
ich versuche derzeit Messdaten mittels sql-Abfrage einzulesen. Bei einem Element funktioniert die Abfrage leider nicht. Ich lese folgenderweise ein:
Code: Alles auswählen
date <- dbGetQuery(con, 'SELECT tag, phi, lam, boen FROM data WHERE tag IN ("20110317") AND phi >= 31 AND phi <= 60 AND lam >= 16 AND lam <=30')
Für das Element boen bekomme ich jetzt folgende Fehlermeldung
Code: Alles auswählen
In rsqlite_fetch(res@tr, n = n):
column 'boen': mixed type, first seen values of type string, coercing other values of type real
In boen sind Fehlwerte mit dem String "ex" belegt, solche Einträge möchte ich jetzt gerne beim Einlesen ersetzten mit NA, damit der Eintrag erhalten bleibt. Die Deklaration NA erkennt R als Fehlwert und berücksichtigt/vernachlässigt ihn dementsprechend?
Danke für eure Vorschläge.
jess
Re: während des einlesens bestimmten string mit NA ersetzen
Verfasst: Mi Aug 02, 2017 2:43 pm
von jogo
Hallo Jess,
wenn Du ein paar Daten liefern könntest, würde ich mich mal daran versuchen.
Aus SQLite heraus bräuchte ich den Output von folgenden Befehlen:
Code: Alles auswählen
.schema data
.mode insert data
select * from data limit 10 ;
Gruß, Jörg
Re: während des einlesens bestimmten string mit NA ersetzen
Verfasst: Mi Aug 02, 2017 7:01 pm
von EDi
Ich finde das neue DBI + odbc + dbplyr ziemlich schick und zugänglich:
http://blog.revolutionanalytics.com/201 ... for-r.html
Vielleicht eine alternative zu SQL (anfangs zumindest)?
Außerdem: Ist das tatsächlich eine FEHLERmeldung oder eine WARNUNG?
Die umwandlung würde ich in R machen (und nicht in SQL), is ja nicht so wild, irgendwie sowas
Re: während des einlesens bestimmten string mit NA ersetzen
Verfasst: Mi Aug 02, 2017 8:38 pm
von jessi
Hallo Jörg,
leider habe ich selbst keinen Zugriff auf die sql-db (nur den Pfad, damit ich einlesen kann).
Ich kann dir den Output der dbGetQuery-Befehls aus R liefern:
Code: Alles auswählen
date <- dbGetQuery(conn, 'SELECT * FROM table WHERE tag In ("20130102", "20130103","20130104") AND phi >= 31 AND phi <= 60 AND lam >= 16 AND lam <=30 LIMIT 10')
str(date)
'data.frame': 15892331obs. of 8 variables:
$timestemp: chr "20133101-0000" ...
$tag: chr "20130102" "20130102" "20130102" "20130102" ...
$zeit: chr "0000" "0000" "0000" ...
$phi: num 31 31 31 31 31 31 31...
$lam: num 16 17 18 19 20 21 22 ...
$temp: num -3.5 5 -0.2 1.7 ...
$t_max: chr 0.5 "ex" "ex" "ex" 3.1 ...
$boen: chr "ex" 0.5 1.7 "ex" "ex" 0.9 ...
Die ausgegebene Meldung ist eine Warnung. Ich habe festgestellt, dass R die Daten trotz Warnung einliest, nur t_max und boen dann nicht mehr numerisch sind, sondern characters.
Ich hätte dann dazu folgendes probiert:
Mit der Zeile
Code: Alles auswählen
my2num <- function(x) as.numeric(sub(",", ".", x))
date[] <- lapply(date, my2num)
kann ich alle Spalten der Matrix date in numerische Elemente umwandeln und R schreibt dann danach statt "ex" NA hin. Leider habe ich jetzt aber noch nicht rausgefunden, wie ich nur bestimmte Spalten, in diesem Fall jetzt t_max und boen, umwandle und die anderen Einträge von date so belasse wie sie sind.
Vielen dank!
Jessi
Re: während des einlesens bestimmten string mit NA ersetzen
Verfasst: Mi Aug 02, 2017 10:28 pm
von jogo
Code: Alles auswählen
D <- dbGetQuery(...)
D$t_max <- my2num(D$t_max)
D$boen <- my2num(D$t_max)
oder
Code: Alles auswählen
D <- transform(D, t_max=my2num(t_max), boen=my2num(boen))
Vielleicht geht auch:
Gruß, Jörg