下面给出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)
在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名。
答案 0 :(得分: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