2017-12-29 41 views
0

다음에 링크 된 질문이 있습니다. Cumsum excluding current value 특정 customer.id를 제외하고 cumsum을 적용하는 방법? 예를 들어 :일부 행을 제외한 Cumsum

order.id customer.id Apples Peaches Pears 
1001  J Car Ltd  1  0  0 
1002  Som Comp  1  2  0 
1005  Richardson  0  0  1 
1004  J Car Ltd  1  0  0 
1003  J Car Ltd  2  0  0 
1006  Richardson  1  0  1 
1007  Aldridge  0  0  1 
1008  J Car Ltd  0  0  1 
1010  Som Comp  0  1  0 

내가 이전의 사과 주문을 추적 할 cumsum을 적용 할 :

Fruits <- Fruits[order(Fruits$order.id), ] #sort data 
Fruits$prev_Apples<-with(Fruits, 
    ave(
     ave(Apples, customer.id, FUN=function(x) c(0, head(cumsum(x), -1))), #get running sum per customer.id 
     interaction(customer.id, order.id, drop=T), 
    FUN=max, na.rm=T) #find largest sum per index per seg 
) 

을하지만 나는 또한 내 cumsum에서 제외 할은 솜 경화제를 customer.id. "조건 :

if(Fruits$customer id =='NULL'){ 
Prev_Apples = 0 
return (Fruits$customer id) 
} 

는 그러나 물론 나는 오류를 얻을 :

order id customer id Apples Peaches Pears Prev_Apples 
1001  J Car Ltd   1  0  0  0 
1002  Som Comp  **1**  2  0  0 
1003  J Car Ltd   2  0  0  1 
1004  J Car Ltd   1  0  0  3 
1005  Richards   0  0  1  0 
1006  Richards   1  0  1  0 
1007  Aldridge   0  0  1  0 
1008  J Car Ltd   0  0  1  4 
1010  Som Comp   1  0  0  **0** 

그래서 나는이 코드 줄을 추가 생각 : 그에게 나는 prev_Apples 열이 동일 0에가되고 싶어요 길이가 1보다 크고 첫 번째 요소 만 사용됩니다. "

왜 오류가 발생하는지 알았지 만 어떻게 피할 수 있습니까? 미리 감사드립니다.

+0

언제부터 코드 스 니펫을 실행 했습니까? – InfiniteFlashChess

답변

0

사과 열의 현재 값을 빼는 것을 잊었습니다. 코드를 사용하여 prev_Apples을 계산하면 다음 코드가 작동합니다.

Fruits$prev_Apples <- Fruits$prev_Apples - Fruits$Apples 
Fruits[which(Fruits$customer.id == "Som Comp"), ]$prev_Apples <- 0 
# order.id customer.id Apples Peaches Pears prev_Apples 
# 1  1001 J Car Ltd  1  0  0   0 
# 2  1002 Som Comp  1  2  0   0 
# 5  1003 J Car Ltd  2  0  0   1 
# 4  1004 J Car Ltd  1  0  0   3 
# 3  1005 Richardson  0  0  1   0 
# 6  1006 Richardson  1  0  1   0 
# 7  1007 Aldridge  0  0  1   0 
# 8  1008 J Car Ltd  0  0  1   4 
# 9  1010 Som Comp  0  1  0   0 
+0

실제로, 나는 그것을 잊었다. 이제는 내 질문을 편집했습니다. 정답을 알려 주셔서 감사합니다. – gmt