2013-07-30 2 views
0

과 약간의 문제가 있으며 기술이 어떻게 든 제한됩니다. 이전 행을 기반으로하는 데이터 프레임에서 두 가지 계산을 수행하려고합니다. 첫 번째 변수는 count 변수이며, 현재 행과 이전 행의 차이를 계산하려고합니다.데이터 프레임의 유연한 계산

은 두 개의 열로 구성 아래 다음 표를 상상해 :

나는 내 문제를 명확히하는 가장 쉬운 방법은 작은 예라고 생각합니다. user은 고객 번호이고 time은 특정 사용자의 거래 시간입니다.

  1. 단순히 실제 사용자의 트랜잭션의 실제 수를 나타내는, 사용자의 트랜잭션을 계산 카운터 변수 count을 : 예제 표에 지정된대로

    는 이제 두 개의 새 열을 만들려고합니다.

  2. 변수 diff (time [s])은 현재 트랜잭션과 이전 트랜잭션 사이의 시간차 ([초])입니다. 따라서 : time [i] - time [i-1]과 같지만 각각의 새로운 사용자에 대한 계산은 0에서 다시 시작해야합니다. 분명히 각 사용자의 첫 번째 트랜잭션에 대해 시간 차이를 계산할 수 없습니다.

나는이 문제를 루프로 풀려고했지만 테이블은 매우 커서 완전한 데이터 세트의 계산은 끝내기를 원치 않는다.

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

답변을 찾을 수

library(plyr) ddply(df, .(user), transform, count=seq_len(time), diff=c(0, diff(time))) 
[여기] (http://stackoverflow.com/questions/17923466/count-of-records-within-levels-of-a-factor), 다른 장소들 . – Thomas

+0

그리고 두 번째 답변은 다른 곳에서 [here] (http://stackoverflow.com/questions/15353731/time-difference-in-r)에서 찾을 수 있습니다. – Thomas

답변

0

나는 그것이 논쟁 데이터에 관해서 인생을 더 쉽게 만드는 plyr 패키지를 사용하여 할 것입니다. 베이스 R에서이 작업과 다른 변환 작업을 수행하는 방법이 있지만 일관성없는 인터페이스가있는 여러 기능이 엉망입니다.

첫 번째 변수에 대한
관련 문제