Hier ist meine Daten:Reihenfolge gefolgt von kumulativer Summe + von
class x1 x2
c 6 90
b 5 50
c 3 70
b 9 40
a 5 30
b 1 60
a 7 20
c 4 80
a 2 10
Ich mag zuerst bestellen, indem class
(Erhöhung oder Verringerung spielt keine Rolle) und dann durch x1
(absteigend), so dass ich wie folgt vorgehen:
df <- df[with(df, order(class, x1, decreasing = TRUE))]
class x1 x2
c 6 90
c 4 80
c 3 70
b 9 40
b 5 50
b 1 60
a 7 20
a 5 30
a 2 10
Und dann würde ich die kumulative Summe über x1
für jeden class
mag:
class x1 x2 cumsum
c 6 90 90
c 4 80 170 # 90+80
c 3 70 240 # 90+80+70
b 9 40 40
b 5 50 90 # 40+50
b 1 60 150 # 40+50+60
a 7 20 20
a 5 30 50 # 20+30
a 2 10 60 # 20+30+10
Nach this answer, tat ich dies:
df$cumsum <- unlist(by(df$x2, df$class, cumsum))
# (Also tried this, same result)
df$cumsum <- unlist(by(df[,x2], df[,class], cumsum))
Aber was ich bekommen, ist eine kumulative Summe über den gesamten Satz + misordered. Um genauer zu sein, hier ist, was ich bekomme:
class x1 x2 cumsum
c 6 90 20 # this cumsum
c 4 80 50 # and this cumsum
c 3 70 60 # and this cumsum are the cumsum of the lines of class a,
b 9 40 100 # then it adds the 'x2' values of class b : 60 ('cumsum' from the previous line) + 40
b 5 50 150 # and keeps doing so : 100 + 50
b 1 60 210 # 150 + 60
a 7 20 300 # 210 + 90
a 5 30 380 # 300 + 80
a 2 10 450 # 380 + 70
Eine Idee, wie ich das lösen könnte? Dank
Oder 'setDT (df) [bestellen (-Klasse, -X1), x2: = cumsum (x2), durch = Klasse] ', die auch die ursprüngliche Reihenfolge von" df "beibehalten wird. – Arun
@Arun Danke, ich dachte auf diese Weise, aber später dachte ich, dass der OP die Reihen neu anordnen wollte. – akrun
Akrun, ah ich sehe .. in Ordnung. – Arun