2017-12-29 17 views
0

Ich habe eine Frage verknüpft mit: Cumsum excluding current value Wie cumsum mit Ausnahme einer bestimmten customer.id anzuwenden? Zum Beispiel:Cumsum mit Ausnahme einiger Zeilen

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 

Ich möchte cumsum anwenden Spur früherer Apfel Aufträge halten:

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 
) 

Aber ich möchte auch von meinem cumsum auszuschließen customer.id Som Comp. Für ihn, ich will die prev_Apples Spalte gleich 0 sein:

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** 

Also ich dachte, diese Codezeile hinzuzufügen:

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

Aber natürlich habe ich den Fehler: „die Bedingung hat Länge> 1 und nur das erste Element wird verwendet "

Ich habe verstanden, warum ich den Fehler bekomme, aber wie kann ich es vermeiden? Danke im Voraus.

+0

Seit wann war Code-Schnipsel eine Sache? – InfiniteFlashChess

Antwort

0

Sie haben vergessen, den aktuellen Wert der Spalte Äpfel zu subtrahieren. Nachdem Sie Ihren Code verwenden, um prev_Apples zu berechnen, sollte der folgende Code funktionieren.

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

Tatsächlich habe ich das vergessen. Jetzt habe ich meine Frage bearbeitet, danke für deine richtige Antwort! – gmt

Verwandte Themen