2016-08-28 4 views

答えて

0

1つのオプションは、正規表現でsubを使用することです:stringrから

dt <- c("12/01/2011 11:49", "18-01-2011 9:50:45") 

sub(".*\\s(\\d{1,2}):.*", "\\1", as.character(dt)) 
# [1] "11" "9" 

またはstr_extract

str_extract(as.character(dt), "(?<=\\s)(\\d{1,2})(?=:)") 
# [1] "11" "9" 
2

あなたはlubridateパッケージで簡単にこれを行うことができます。 @alistaireによって指摘されているように、デフォルトの解決策では、形式が矛盾しているため(秒と秒がありません)、すべての情報(分と秒)が正しく解析されません。幸いなことに、truncatedパラメータがここにあります。 1つの要素がないため、1に設定することができます。

truncatedパラメータがゼロ以外の場合は、機能も切り捨てられた形式をチェックします。

library(lubridate) 

hour(dmy_hms(c("12/01/2011 11:49", "18-01-2011 9:50:45"), truncated = 1)) 

[1] 11 9 

あるいはさらに良いmagrittrパッケージからのパイプライン表記%>%を使用して - この名前が大好きです。

library(lubridate)  
library(magrittr) 

c("12/01/2011 11:49", "18-01-2011 9:50:45") %>% 
    dmy_hms(truncated = 1) %>% 
    hour() 

[1] 11 9 
+0

ご報告いただきありがとうございます。 magrittrに言及するように修正された投稿。 – Romain

+0

これらは両方ともdmy_hmsではないので、実際に中間製品を見ると誤って分を解析しています。 'parse_date_time'を使うと、複数の注文を渡すことができます。 'lubridate :: parse_date_time(datetimes、c( 'dmy hms'、 'dmy hm'))' – alistaire

+0

[Docs](http://stackoverflow.com/documentation/r/1157/date-and-time/7018/parsing -dates-and-datetimes-from-lubridate#t = 201608281638168797469) – alistaire

関連する問題