Frage

Ich habe den Charakter Vektor unter

a = c("2009-07-31 18:00:33", "2009-07-31 18:00:38", "2009-07-31 18:00:43",  "2009-07-31 18:00:49", "2009-08-01 01:58:49", "2009-08-01 01:53:16",  "2009-08-01 08:04:13", "2009-08-01 16:16:13")

Ich mag diese Zeit konvertieren Objekte so ich dies tun:

b = strptime(a, "%Y-%m-%d %H:%M:%S")

Warum a und b zu tun haben unterschiedliche Längen?

> length(a)
[1] 8
> length(b)
[1] 9
War es hilfreich?

Lösung

Das Objekt b hat Klasse POSIXlt. Arrays von POSIXlt Daten zurückkehren immer eine Länge von 9, da die eine benannte Liste von neun Vektoren darstellen:

R> class(b)
[1] "POSIXt"  "POSIXlt"

R> unclass(b)
$sec
[1] 33 38 43 49 49 16 13 13
$min
[1]  0  0  0  0 58 53  4 16
$hour
[1] 18 18 18 18  1  1  8 16
$mday
[1] 31 31 31 31  1  1  1  1
$mon
[1] 6 6 6 6 7 7 7 7
$year
[1] 109 109 109 109 109 109 109 109
$wday
[1] 5 5 5 5 6 6 6 6
$yday
[1] 211 211 211 211 212 212 212 212
$isdst
[1] 1 1 1 1 1 1 1 1

Klasse POSIXct, die die (signiert) Anzahl der Sekunden seit dem Beginn repräsentiert von 1970 als numerischer Vektor, gibt Ihnen die erwartete Länge:

R> length(as.POSIXct(a))
[1] 8
R> unclass(as.POSIXct(a))
[1] 1.249e+09 1.249e+09 1.249e+09 1.249e+09 1.249e+09 1.249e+09 1.249e+09
[8] 1.249e+09
attr(,"tzone")
[1] ""

Andere Tipps

Wie Sie in ?strptime sehen es konvertiert Zeichenkette in der Klasse POSIXlt. In R gibt es zwei Arten von Zeiten: POSIXlt und POSIXct. Beschreibung ist in ?DateTimeClasses, sondern Abkürzung:

  

Klasse „POSIXct“ steht für die (signiert) Anzahl der Sekunden seit der   Anfang des Jahres 1970 als numerischer   Vektor.

     

Klasse „POSIXlt“ ist ein benannter   Liste von Vektoren repräsentiere   sec 0-61: Sekunden   min 0-59: Minuten Stunde 0-23: Stunden mday 1-31: Tag des Monats   mon 0-11: Monate nach dem ersten von   das Jahr. Jahr Jahre seit 1900.   wday 0-6 Tag der Woche, beginnend   am Sonntag. yday 0-365: Tag der   Jahr. ISDST Sommerzeit   Flagge. Positiv, wenn in Kraft, Null, wenn   nicht, negativ, wenn nicht bekannt.

So Ihre b ist die Liste von 9 Vektoren, 8-Länge jeder.

Sie können sehen:

sapply(b,length)

Sie könnten genaue Umwandlung verwenden:

b_1 = as.POSIXlt(a, "%Y-%m-%d %H:%M:%S",tz="")
b_2 = as.POSIXct(a, "%Y-%m-%d %H:%M:%S",tz="")

length(b_1) # 9
length(b_2) # 8

Nur für das Protokoll, dieses FAQ Problem ist etwa in R ändern 2.11.0:

  

2.11.0 NEUE FUNKTIONEN

     

Länge (POSIXlt) gibt jetzt die Länge   des entsprechenden abstrakten   Zeit- und Datums-Vektor, anstatt immer 9   (Die Länge der zugrunde liegenden Liste   Struktur). (Wunsch der PR # 14073 und   PR # 10507).

Das ist vom 2. Dezember Eintritt der RSS-Feeds tägliche Änderungen im Subversion-Archiv zusammenfassen, die Entwickler-Seite für Details über das Futter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top