2016-08-08 49 views
0

Ich habe eine CSV-Datei (Excel) mit einem Zeitstempel und Wert importiert. Alle meine Bemühungen, die Zeitstempelspalte in nutzbare Zeit in R umzuwandeln, ergeben N/A. Ich habe mir mehrere Threads angesehen (SO und anderswo) und habe viele Vorschläge ausprobiert, aber irgendwie nicht geschafft, es richtig zu machen. Ich habe auch verschiedene einfachere Beispiele aus z.B. R-Blogger und sie haben gut funktioniert.R - Konvertierung von CHR zu POSIXct Datum/Uhrzeit Format in importierten CSV-Datei endet in N/A

> dframe <- read.csv2("file.csv", dec=".", colClasses=c("character","numeric"), as.is=TRUE)

> str(dframe)

'data.frame': 424 obs. of 2 variables: 
    $ d: chr "2016.08.02 03:59:45" "2016.08.02 04:11:16" "2016.08.02 04:22:45" "2016.08.02 04:34:13" ... 
    $ h: num 30 33.3 35.6 35.6 48.9 48.9 48.9 47.8 46.7 46.7 ... 

Das glaube ich ist ein guter Anfang. Dann:

> dframe$d <- as.POSIXct(dframe$d, tz="GMT", format="%Y.%M.%D %H:%M:%S")
> str(dframe)

'data.frame': 424 obs. of 2 variables: 
    $ d: POSIXct, format: NA NA NA NA ... 
    $ h: num 30 33.3 35.6 35.6 48.9 48.9 48.9 47.8 46.7 46.7 ... 

Alle Vorschläge sind willkommen. Ich kenne lubridate, werde es aber zumindest für eine Weile nicht versuchen.

+1

Versuchen: as.POSIXct (Dframe $ d, tz = "GMT", format = "% Y% m% d% H:.% M:% S"). Man muss Kleinbuchstaben m und d für Monat und Tag verwenden. – Dave2e

+0

Ja natürlich Dave2e. Danke! – bjarg

Antwort

1

Versuchen lubridate

Multithreaded BLAS/LAPACK libraries detected. Using 8 cores for math algorithms. 
> library(lubridate) 

Attaching package: ‘lubridate’ 

The following object is masked from ‘package:base’: 

    date 

> ymd_hms("2016.08.02 03:59:45") 
[1] "2016-08-02 03:59:45 UTC" 
> str(ymd_hms("2016.08.02 03:59:45")) 
POSIXct[1:1], format: "2016-08-02 03:59:45" 

„Ich bin von lubridate bewusst, aber es wird nicht versuchen, für eine Weile zumindest.“ - Gibt es einen Grund, warum Sie lubridate nicht verwenden möchten/können? Es scheint eine einfache Lösung zu sein.

EDIT

Ich war bei der Arbeit heute gebohrt, so habe ich beschlossen, diese eine weitere Chance zu geben. Der Grund, warum Ihre POSIXct-Funktion fehlgeschlagen ist, liegt hauptsächlich am "." Du hast als Trenner. Eine schnelle Lösung ist es, gsub zu verwenden, um diese "." mit "-". Hier ein Beispiel:

> s = c("2016.08.02 03:59:45", "2016.08.02 04:11:16", "2016.08.02 04:22:45", "2016.08.02 04:34:13") 
> dates = as.POSIXct(gsub(pattern="\\.", replacement="-", x=s)) 
> print(dates) 
[1] "2016-08-02 03:59:45 PDT" "2016-08-02 04:11:16 PDT" 
[3] "2016-08-02 04:22:45 PDT" "2016-08-02 04:34:13 PDT" 
+0

Nur dass ich viel Zeit damit verbracht habe und ich wollte dem auf den Grund gehen. Ich werde in naher Zukunft auf lubridate schauen. Wie es oft vorkommt (zumindest für mich) beginnt man mit einer gemischten Tüte von Problemen und reduziert allmählich die nr. von Problemen, bis nur noch einer übrig ist, etwas, das irgendwo auf dem Weg unbeabsichtigt eingeführt wurde, – bjarg