2016-07-04 22 views
-1

ich die folgende Datenrahmen haben, wird der Datensatz bereits aus einer Datenbanktabelle importiert und created_at Spalte Zeichentyp:Extrahieren Stunde und Minute aus Zeichenspalte in r

sale_id  created_at 
1    2016-05-28T05:53:31.042Z 
2    2016-05-30T12:50:58.184Z 
3    2016-05-23T10:22:18.858Z 
4    2016-05-27T09:20:15.158Z 
5    2016-05-21T08:30:17.337Z 
6    2016-05-28T07:41:14.361Z 

Wie kann ich nur Stunde extrahieren und Minute von created_at Spalte, vorzugsweise mit Base r-Bibliotheken? ich muss später Stunde und Minute zusammenfügen und es als neue Spalte setzen.

+1

'substr (df $ created_at, 12, 16)' oder wenn Sie brauchen nicht die ':' 'dann gsub (substr (df $ created_at , 12, 16)) ' – hrbrmstr

Antwort

1

Wir haben die praktischen Funktionen in lubridate verwenden können die character Spalte DateTime und extrahieren Sie die Stunde und Minute mit format

library(lubridate) 
v1 <- ymd_hms("2016-05-28T05:53:31.042Z") 
format(v1, "%H:%M") 
#[1] "05:53" 

Oder mit nur base R

format(as.POSIXct("2016-05-28T05:53:31.042z", format = "%Y-%m-%dT%H:%M:%S"), "%H:%M") 
#[1] "05:53" 

zu konvertieren

Andere optio ns sind mit gsub

gsub(".*T|:\\d+\\..*", "", "2016-05-28T05:53:31.042z") 
#[1] "05:53" 
+0

Ist es möglich, es nicht mit lubridate zu verwenden? – sanaz

+0

@sanaz Ja, es ist möglich – akrun

+0

Wie ist es möglich? – sanaz

1

nur Basis R-Bibliotheken verwenden:

format(as.POSIXct("2016-05-28T05:53:31.042z", format = "%Y-%m-%dT%H:%M:%S"), "%H:%M") 

05:31

Es scheint, dass UTC-Format ist. Weitere Informationen zum Analysieren dieses Formats finden Sie unter this.

Lassen Sie es mich Sys.Date() als auch für ein Beispiel unter Verwendung zeigen:

format(as.POSIXlt(Sys.time(), "America/New_York"), "%H:%M") 

08:15

Mit dem unendlich viel besser lubridate Bibliothek:

require(lubridate) 
minute(ymd_hms("2016-05-28T05:53:31.042Z")) 
second(ymd_hms("2016-05-28T05:53:31.042Z")) 

31,042

+0

Deshalb fragte ich vorzugsweise Basis R-Pakete – sanaz

+0

@sanaz OK kein Problem, ich habe die Frage aktualisiert und ein bisschen mehr hinzufügen dazu –

+1

@sanaz Richtig deshalb habe ich gesagt, dass ich nicht wusste, welche Zeitzone es ist, aber ich würde es aktualisieren (und ich fügte ein anderes Beispiel mit Sys.Date hinzu).Ich fand heraus, dass es GMT ist und aktualisierte es erneut. –