我有一個三列數據框:timestamp,key,按時間排序的事件。計算日誌中唯一值的總和R
ts,key,event
3,12,1
8,49,1
12,42,1
46,12,-1
100,49,1
由此,我想創建一個時間戳的數據幀(所有的唯一鍵 - 與累積和0,直到給定的時間戳所有的唯一密鑰)的所有獨特的按鍵劃分,直到相同的時間戳。例如。對於上述示例中的結果應該是:
ts,prob
3,1
8,1
12,1
46,2/3
100,2/3
我最初的一步是計算由關鍵分組的cumsum:
items = data.frame(ts=c(3,8,12,46,100), key=c(12,49,42,12,49), event=c(1,1,1,-1,1))
sumByKey = ddply(items, .(key), transform, sum=cumsum(event))
在第二(和最後)步驟i迭代sumByKey
與用於並且使用向量跟蹤所有唯一鍵和所有唯一鍵的總和爲0,例如if(!(k %in% uniqueKeys) uniqueKeys = append(uniqueKeys, key)
。概率是使用這兩個向量導出的。
最初,我嘗試使用plyr來解決第二步,但是我想避免重新計算sumByKey
中每行的某個時間戳的唯一鍵。我缺少的是從傳遞給ddply的函數中引用外部變量的方法。或者,(或更多功能),使用傳遞迴該函數的累加器,例如函數(acc,x)acc + x。
是否有可能以更好的方式解決第二步, ddply?
我不知道如果我理解正確的,但不應該成爲TS 46和100是2/3的結果(3唯一的鍵 - 1總和爲0)/ 3? – 2010-08-26 08:42:22