2016-03-21 7 views
2

Ich habe zu diesem Thema weitere Fragen lesen, aber sie scheinen nicht auf meine Daten-Set zu arbeiten:Wie in r Sekundenbruchteile in POSIXct zu forma

   Timestamp Bid.price Ask.price Bid.volume Ask.volume 
20070313 07:01:04:762 11.14122 11.14478 4.539397 1.891416 
20070313 07:01:07:608 11.13930 11.14670 1.277812 3.066750 
20070313 07:01:08:701 11.14095 11.14505 0.050396 0.050396 
20070313 07:01:11:275 11.14098 11.14502 0.226505 0.543613 
20070313 07:01:13:884 11.13930 11.14670 0.322856 0.774855 
20070313 07:01:16:588 11.13930 11.14670 0.405654 0.973569 

ich versucht habe:

as.POSIXct(fx[,1], format="%y%m%d %H:%M:%S:%OS3") 
as.POSIXct(paste(fx[,1]), format="%y%m%d %H:%M:%S:%OS3") 
as.POSIXct(paste(fx[,1]), format="%y%m%d %H:%M:%S") 

aber alles, was ich bekomme, sind s ...

Wie kann ich das umgehen? Hier

ist der Datensatz:

fx <- structure(list(Timestamp = c("20070313 07:01:04:762", "20070313 07:01:07:608", 
"20070313 07:01:08:701", "20070313 07:01:11:275", "20070313 07:01:13:884", 
"20070313 07:01:16:588"), Bid.price = c(11.14122, 11.1393, 11.14095, 
11.14098, 11.1393, 11.1393), Ask.price = c(11.14478, 11.1467, 
11.14505, 11.14502, 11.1467, 11.1467), Bid.volume = c(4.5393967628479, 
1.27781200408936, 0.0503959991037846, 0.226504996418953, 0.3228560090065, 
0.405654013156891), Ask.volume = c(1.89141595363617, 3.06675004959106, 
0.0503959991037846, 0.543613016605377, 0.774855017662048, 0.973568975925446 
)), .Names = c("Timestamp", "Bid.price", "Ask.price", "Bid.volume", 
"Ask.volume"), row.names = c(NA, 6L), class = "data.frame") 
+0

Sie können die Grundlagen mit 'strptime (fx $ Zeitstempel,% Y% m% d% H:% M:% S:% OS ')', aber ich bin ziemlich sicher, dass es die Bruchteil Sekunden schlachtet, wenn sie wichtig sind. Möglicherweise müssen Sie das letzte ':' durch ein '.' ersetzen, damit Sie% OS verwenden können. – alistaire

+0

@alistaire Es entfernt die Millisekunden, und nach dem OP-Titel scheinen sie wichtig zu sein. Man kann entweder "% S" oder "% OS" verwenden, aber meines Wissens nicht beides. Ich stimme zu, dass, es sei denn, ein etwas ausgefallenes Paket verwendet wird, wird es wahrscheinlich notwendig sein, das letzte ':' zu entfernen. Dann könnte man '% Y% m% d% H:% M:% OS' verwenden. Es kann außerdem erforderlich sein, die Einstellungen von' options (digs.scs) 'zu ändern. – RHertel

+2

In eins: 'strptime (sub (': (\\ d {3}) $', '. \\ 1', fx $ Zeitstempel), '% Y% m% d% H:% M:% OS ') ' – alistaire

Antwort

4

Da Timestamp hat ein : zwischen ganzen Sekunden und Sekundenbruchteilen, und es ist keine Zeit Parsen Zeichenfolge („Umwandlungsspezifikation“, zB %Y) für Bruchteile von Sekunden Ohne das Ganze müssen Sie die letzte : in eine . ändern, damit Sie es mit %OS analysieren können. sub kann darum kümmern, sucht

  • ein Doppelpunkt :
  • gefolgt von 3 Ziffern \\d{3}, gefangen (...)
  • bis zum Ende der Zeile gefolgt $,

und ihn zu ersetzen mit

  • a Zeitraum .
  • gefolgt von der erfassten Gruppe.

Ferner wenn Sie wollen die Sekundenbruchteile sehen, dass es das Parsen, müssen Sie die digits.secs Option setzen:

options(digits.secs = 3) 
strptime(sub(':(\\d{3})$', '.\\1', fx$Timestamp), '%Y%m%d %H:%M:%OS') 
# [1] "2007-03-13 07:01:04.762 EDT" "2007-03-13 07:01:07.608 EDT" "2007-03-13 07:01:08.700 EDT" 
# [4] "2007-03-13 07:01:11.275 EDT" "2007-03-13 07:01:13.884 EDT" "2007-03-13 07:01:16.588 EDT" 

Beachten Sie, dass strptime Einsätze die lokale Zeitzone (EDT für mich im Moment), aber Sie können das mit dem Argument tz auf das einstellen, was Sie wollen (oder was auch immer es für Ihre Daten sein sollte).

Verwandte Themen