R - вероятность разницы дат - PullRequest
1 голос
/ 14 сентября 2011

Учитывая df ниже, я хочу получить время между запросами, а затем получить текстовый вывод гистограммы вероятностей того, что запрос будет проходить между 1 секундами, 2 секундами, 3 секунд и т. д. до 10 секунд. Я хочу использовать все данные при расчете вероятностей, но я хочу видеть только первые 10 секунд данных.

Я пытался получить помощь с этим на 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)

А вот как я получаю отличия с превосходной помощью Андри:

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 Ответ

1 голос
/ 14 сентября 2011

Часть "гистограмма как текст" сбивает меня с толку, но я предполагаю, что вы действительно хотите сделать табулирование в течение одной секунды:

 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...