2014-10-08 38 views
3

間隔mm格式爲5個分鐘的時間間隔爲25小時的時間內R +一個整數轉換爲HH:使用正則表達式+ GSUB

> interval 
[1] 45 50 55 100 105 110 115 120 125 130 135 2035 2040 2045 2050 2055 2100 2105 2110 2115 2120 2125 

我想插入:把它放在一個時間fomat一個子集我可以轉換爲時間格式

> gsub('^([0-9]{1,2})([0-9]{2})$', '\\1:\\2', interval) 
[1] "45" "50" "55" "1:00" "1:05" "1:10" "1:15" "1:20" "1:25" "1:30" "1:35" "20:35" "20:40" "20:45" 
[15] "20:50" "20:55" "21:00" "21:05" "21:10" "21:15" "21:20" "21:25" 

我已經得到它幾乎所有的例子工作。
我如何得到它,這樣它的工作原理上的數字"5" ... "45" "50" "55"

在這裏找到這個複製,但這並不使用

回答

5

一個簡單的方法來做到這將是確保所有的輸入具有至少4個字符:

gsub('^([0-9]{1,2})([0-9]{2})$', '\\1:\\2', sprintf('%04d',interval)) 
# "00:45" "00:50" "00:55" "01:00" "01:05" "01:10" "01:15" "01:20" "01:25" 
# "01:30" "01:35" "20:35" "20:40" "20:45" "20:50" "20:55" "21:00" "21:05" 
# "21:10" "21:15" "21:20" "21:25" 
+0

認爲它可能很簡單:)你能簡單地解釋一下'%04d'爲我的清晰和參考。 tks – HattrickNZ 2014-10-08 22:39:06

+1

或更改:'sub(「(..)」,「\\ 1:」,sprintf(「%04d」,interval))' – 2014-10-08 23:50:52

+0

嘗試運行'sprintf('%04d',interval)'瞭解它的功能。您可以查看'?sprintf'來獲取函數如何工作的一些示例,以及如何指定不同的格式。正如你所看到的,它填充數字左邊的零,直到有四位數(在這種情況下)。 'sprintf'是來自C語言的一個非常古老的函數,具有一種神祕的語法。我使用它,因爲我知道如何快速做基本的事情,不是因爲它很容易學習。 – nograpes 2014-10-09 00:05:08

2

使用sub

> sub('..\\K', ':', sprintf('%04d',interval), perl=T) 
# [1] "00:45" "00:50" "00:55" "01:00" "01:05" "01:10" "01:15" "01:20" "01:25" 
# [10] "01:30" "01:35" "20:35" "20:40" "20:45" "20:50" "20:55" "21:00" "21:05" 
# [19] "21:10" "21:15" "21:20" "21:25" 
相關問題