2016-07-04 30 views
-1

我有以下的數據幀,所述數據集已經從數據庫表和created_at柱進口具有字符類型: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 

如何可以只提取小時和分鐘from created_at列,最好使用base r庫?我需要稍後粘貼小時和分鐘,並將其作爲新列。

+1

'SUBSTR(DF $ created_at,12,16)'或者如果你不需要':''然後GSUB(SUBSTR(DF $ created_at ,12,16))' – hrbrmstr

回答

1

我們可以使用便捷的功能lubridatecharacter列轉換爲DateTime,並使用提取小時和分鐘用format

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

還是隻有base R

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

其他選擇NS包括與gsub

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

有沒有可能不使用lubridate? – sanaz

+0

@sanaz是的,這是可能的 – akrun

+0

怎麼可能? – sanaz

1

只使用基礎R庫:

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

05:31

看來,是UTC格式。有關解析該格式的更多詳細信息,請參閱this

讓我用它爲Sys.Date()一個例子,以及顯示:

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

08:15

使用無限美好lubridate庫:

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

五3

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

31.042

+0

這就是爲什麼我問最好基地R包 – sanaz

+0

@sanaz好吧沒問題,我已經更新了這個問題,並會增加更多一點它也 –

+1

@sanaz正確的,這就是爲什麼我說我不知道​​什麼時區,但我會更新它(和我添加了Sys.Date的另一個例子)。我發現它是GMT,然後再次更新。 –

相關問題