2011-09-13 69 views
1

給定df下面,我想要得到請求之間的時間,然後得到一個文本輸出一個概率的直方圖,請求將在1秒之間,相隔2秒,3相隔數秒等等,直到10秒。我想在計算概率時使用所有數據,但我只想查看前10秒的數據。R - 日期差異的概率

我試圖在ML上獲得這方面的幫助,但是不能。我在這裏得到了很大的幫助,所以我希望我不會濫用這些幫助。這應該是我最後一個問題。非常感謝。

df <- read.csv(textConnection(' 
"SOURCE","REQUEST_DATE" 
"A","09/11/2011 09:28:48" 
"A","09/11/2011 09:28:47" 
"A","09/11/2011 09:15:42" 
"A","09/11/2011 09:15:41" 
"D","09/13/2011 09:06:53" 
"D","09/13/2011 09:06:52" 
"D","09/13/2011 08:56:55" 
"D","09/13/2011 08:56:52" 
"D","09/13/2011 08:55:43" 
"D","09/13/2011 08:39:07" 
'), stringsAsFactors=FALSE) 

下面是我應得的差異,與Andrie的出色幫助:

df_diff <- ddply(df, .(SOURCE), summarize, TIME_DIFF=-unclass(diff(REQUEST_DATE))) 

所以,我想類似如下(與由結果)

A 1 55% 
A 2 15% 
A 3 10% 
... 
A 10 5% 
D 1 10% 
D 2 12% 
D 3 15% 
... 
D 10 1% 
例如,

D 5013 2%會被切斷,因爲我只想要每個來源的前10位。

+1

你看了'hist'?特別注意諸如'freq = F'和'plot = F'這樣的參數。 – Gregor

+0

如果下一個人沒有遇到同樣的錯誤,則需要先進行日期時間轉換:'df $ REQUEST_DATE < - as.POSIXct(df $ REQUEST_DATE,format =「%m /%d /%Y%H:% M:%S「) –

+0

如何在每個數據源的數據幀上運行hist? –

回答

1

「直方圖爲文本」部分是混淆了我,但我猜你真的想一秒休息中製表:

df_diff$tdiff_grp <- cut(df_diff$TIME_DIFF, 0:10, right=FALSE) 
with(df_diff, tapply(tdiff_grp, SOURCE, table)) 
$A 
[0,1) [1,2) [2,3) [3,4) [4,5) [5,6) [6,7) [7,8) [8,9) [9,10) 
    0  2  0  0  0  0  0  0  0  0 

$D 
[0,1) [1,2) [2,3) [3,4) [4,5) [5,6) [6,7) [7,8) [8,9) [9,10) 
    0  1  0  1  0  0  0  0  0  0 

後你明確什麼是真正需要的,那將是一件簡單的事情使用prop.table或者用它們的總和除以(然後乘以100)得出百分比。

編輯:一個簡單的函數可以返回百分比:

> tbls <- with(df_diff, tapply(tdiff_grp, SOURCE,table)) 
> lapply(tbls, function(x) 100*x/sum(x)) 
$A 
[0,1) [1,2) [2,3) [3,4) [4,5) [5,6) [6,7) [7,8) [8,9) [9,10) 
    0 100  0  0  0  0  0  0  0  0 

$D  
[0,1) [1,2) [2,3) [3,4) [4,5) [5,6) [6,7) [7,8) [8,9) [9,10) 
    0  50  0  50  0  0  0  0  0  0 
+0

你的猜測正確無誤。而且,是的,我想要百分比。不太確定該怎麼做。不過,我會將你的答案標記爲正確,因爲它看起來很接近。非常感謝。 –