2012-12-31 54 views
0

我有一個數據集,需要大量的格式化清理,並且在某些時候我想計算研究人員在釣魚的時間。如果捕魚開始和停止的時間是正常格式,這很容易,但由於某些原因數據不是有用的十進制格式。例如,早上10:45記錄爲10.45,而11:10將是11.10。將時間重新格式化爲可以操縱的數據

我已經試過要求Excel用冒號替換所有的句點(它不會這樣做,而其他人已經試圖幫助我使Excel合作)。我可以考慮一些在R中這樣做的方法,但我不知道如何繼續。首先,如果有一些方法可以將小數點後面的部分除以60,那麼十進制格式將是有意義的。那麼,10.45將是10.75,減法不成問題。或者,它也會工作,只是寫一些簡單的代碼來代替冒號的時期,然後(我在想?)使用類似chron軟件包的方式來處理它。

我不知道如何編碼這些選項 - 有沒有人有任何建議?我認爲除以60可以通過在期間之前和之後分解碎片的功能來實現(如粘貼的反面),但是我找不到這種功能的名稱。第一個也是我想象的更簡單,雖然第二個實際上可能揭示了我在R中遇到的一個更大的問題,該問題試圖弄清楚如何使命令變得一般化。我明白我該如何強制它將10.45改爲10:45,但是我希望我知道是否有一種格式只是爲了說「XX.XX並改爲XX:XX」而不管實際的數字是什麼。但我想一次只有一件事。

+0

發表一個簡短的例子。最好使用'dput(head(X))'(其中'X'是你的數據集)來產生這個,以避免混淆。 –

+0

Time.Start = c(9.10,9.10,9.10,10.10,9.10,10.10),Time.Stop = c(14.25,14.25,14.25,14.25,14.25,14.25) (我已經有很多重複有辦法處理) – HFBrowning

+0

@HFBrowning。將來,請編輯您的問題,而不是在評論中回覆。 –

回答

4

在沒有一個例子,我提出as.difftime爲此,:

> d <- as.difftime('10.45', format='%H.%M') 
> d 
Time difference of 10.75 hours 
> as.numeric(d) 
[1] 10.75 

的評論,你必須確保你作爲字符串讀取時間值。

Time.Start = c(9.10, 9.10, 9.10, 9.10, 9.10, 9.10) 
Time.Stop = c(14.25, 14.25, 14.25, 14.25, 14.25, 14.25) 

將它們變成字符串。這將是更好的,只是看他們作爲首位字符串,但我們可以用sprintf的雜牌他們:

Time.Stop <- sprintf('%.2f', Time.Stop) 
Time.Start <- sprintf('%.2f', Time.Start) 

然後解析,並採取差異。 -正在返回類difftime的對象,與上面類似。

strptime(Time.Stop, format='%H.%M') - strptime(Time.Start, format='%H.%M') 

## Time differences in hours 
## [1] 5.25 5.25 5.25 5.25 5.25 5.25 
## attr(,"tzone") 
## [1] "" 
+1

指出這可能只適用於24小時以內的情況。 –

+0

如果提供的示例不夠好,我表示歉意。我有兩個向量Time.Start和Time.Stop,每個觀察時間長。我的觀察結果都不超過22.00。 你發佈的內容絕對是我想要的,但我不認爲我知道如何使它適用於整個矢量?我從來沒有見過as.difftime,因此我的部分研究是值得的 – HFBrowning

+0

@MatthewPlourde不只是不到24小時 - 它們都必須在同一天內,否則這段代碼將會中斷。 –