이것이 내 데이터 프레임의 모습입니다. 내 희망 필드는 NewCumV1
입니다.두 번째 필드의 누적 합계 수정
라이브러리 (data.table) DT < - FREAD은 ('
V1 V2 NewCumV1 Group V3
1 1 2 1 1
0 2 4 1 1
0 4 8 1 1
0 3 11 1 2
2 1 16 2 1
0 2 18 2 2
0 5 23 2 3
1 2 29 3 1 ')
NewCumV1
은 행 때 그룹 변경 일반적으로 cumsum(V1+V2)
및 cumsum(V1+V2)+Last Value of V3 from prior group
인 5 행의 그래서
, 그룹. Group=1
에서 Group=2
으로 변경하면 기존의 cumsum
이 11이고, 2=V1
및 1=V2
과 2=V3
을 추가합니다.이 값은 V3의 마지막 값입니다. 또는 Group=1
, it.So에, 그 후
NewCumV1 For New Group2 at 5th row= 11+2+1+2 = 16
, 그것은 Group
가 바뀔 때까지 정기적으로 cumsum(V1+V2)
입니다. 6 행에서 그래서 계산은 다음과 같아야합니다
16+0+2=18(6th row)
18+0+5=23(7th row)
8 행은 새 그룹 Group=3
이다, 그래서 cumsum
리셋이있다. 나는 시도
23+1+2+3=29(last row)
, 23 V1=1
및 V2=2
및 it.So에 V3=3
을 추가 할 수있는 마지막 그룹에서 NewCumV1
을 :
dt[NewCumV1:= cumsum(V1+V2)+ last(V3), by=Group))]
NewCumV1의 마지막 값은 맞습니까? 각 그룹에 대해'cumsum (V2)'를 계산하면 7 번째 관측 값은 8이므로 23 대신에 31을 얻습니다. – akrun
위의 주석이 맞으면'dt [, New1 : = cumsum (V2), Group = 1, New1 : = cumsum (i1 + V1 + V2)], i1 : = shift ((그룹, fromLast = TRUE) = NULL] []' – akrun
@akrun 위대한 답변에 감사드립니다. 코드의 끝에있는이 작은 변화'dt [Group! = 1, New1 : = cumsum (i1 + V1 + V2), by = Group]'은 제 일을 끝냅니다. 나는 그것을 명확하게하기 위해 나의 편집부에서 약간의 편집을 할 것이다. – gibbz00