1

私はこのようなデータフレームを持っています:

data=data.frame(ID=c("0001","0002","0003","0004","0004","0004","0001","0001","0002","0003"),Saldo=c(10,10,10,15,20,50,100,80,10,10),place=c("grocery","market","market","cars","market","market","cars","grocery","cars","cars"))

ID変数でcumsumまたはapplyを適用して、各個人のアルドの合計を計算しようとしましたが、希望する結果が得られません。私はこのような人が欲しいです:

  ID      Saldo.Total
1 0001         190
2 0002          20
3 0003          20
4 0004          85 
4

2 に答える 2

5

あなたが使用することができますaggregate

> aggregate(Saldo ~ ID, data, function(x) max(cumsum(x))) ## same as sum
    ID Saldo
1 0001   190
2 0002    20
3 0003    20
4 0004    85

IDごとの累積合計に本当に関心がある場合は、次のことを試してください。

within(data, {
  Saldo.Total <- ave(Saldo, ID, FUN = cumsum)
})
#     ID Saldo   place Saldo.Total
# 1  0001    10 grocery          10
# 2  0002    10  market          10
# 3  0003    10  market          10
# 4  0004    15    cars          15
# 5  0004    20  market          35
# 6  0004    50  market          85
# 7  0001   100    cars         110
# 8  0001    80 grocery         190
# 9  0002    10    cars          20
# 10 0003    10    cars          20
于 2013-03-14T02:31:51.413 に答える
1

混乱しているかもしれませんが、必要なのは実際には累積合計ではなく、単なる合計です。

library(plyr)
ddply(
  data,
  .(ID),
  summarize,
  Saldo.Total=sum(Saldo)
  )

出力:

    ID Saldo.Total
1 0001         190
2 0002          20
3 0003          20
4 0004          85

累積合計は、ベクトルに沿って移動するときの「現在の合計」です。例:

> x = c(1, 2, 3, 4, 5)
> cumsum(x)
[1]  1  3  6 10 15
于 2013-03-14T02:31:51.030 に答える