2013-07-30 99 views
0

我有一個小問題,R我的技能在某種程度上受到限制。 我想在基於前一行的數據框中進行兩次計算。 第一個是一個計數變量,另外我想計算當前和前一行之間的差異。數據幀中的靈活計算

我想澄清我的問題最簡單的方法是一個小例子:

試想下表下面,只由兩列。 user是客戶號碼,time是特定用戶交易的時間。

現在我要創建兩個新列如示例表中規定:

  1. 計數器變量count,它只是計算用戶的交易,表明用戶的實際交易的實際數量。

  2. 變量diff (time [s]),它是當前事務與前一事務之間的時間差[以秒爲單位]。因此類似於:time [i] - time [i-1],但每個新用戶的計算必須從零開始;顯然,每個用戶的首次交易沒有時間差。

我試圖用一個循環來解決這個問題,但是該表是非常大的,設置的完整數據的計算只是不想結束。

user time count diff(time[s]) 
A 10:00:00 1 
A 10:30:00 2 1.800 
A 12:00:00 3 5.400 
A 13:00:00 4 3.600 
B 14:00:00 1 
C 15:00:00 1 
C 16:00:00 2 3.600 
C 17:00:00 3 3.600 
+0

回答你的第一個變量可以找到[這裏](http://stackoverflow.com/questions/17923466/count-of-records-within-levels-of-a-factor),以及其他地方。 – Thomas

+0

第二個問題的答案可以在這裏找到(http://stackoverflow.com/questions/15353731/time-difference-in-r)等等。 – Thomas

回答

0

我會使用plyr軟件包來做到這一點,當涉及到數據爭奪時,這會使生活變得更容易。有很多方法可以在基本R中執行此操作和其他轉換,但是它是一個具有不一致接口的不同功能的混亂。

library(plyr) 
ddply(df, .(user), transform, count=seq_len(time), diff=c(0, diff(time)))