我有一个带有一堆捐赠数据的dataframe。我获取数据并按时间顺序从最早到最新的礼物进行排列。接下来,我添加一列,其中包含一段时间内礼物的累计金额。该数据具有多年的数据,我一直在寻找一种在每年的年初(将年度开始和结束于7月1日作为财务目的)将cumsum重置为0的好方法。

当前是这样的:

id        date          giftamt      cumsum()
005       01-05-2001     20.00        20.00
007       06-05-2001     25.00        45.00
009       12-05-2001     20.00        65.00
012       02-05-2002     30.00        95.00
015       08-05-2002     50.00       145.00
025       12-05-2002     25.00       170.00
...          ...          ...         ...

这是我希望的样子:
id        date          giftamt      cumsum()
005       01-05-2001     20.00        20.00
007       06-05-2001     25.00        45.00
009       12-05-2001     20.00        20.00
012       02-05-2002     30.00        50.00
015       08-05-2002     50.00        50.00
025       12-05-2002     25.00        75.00
...          ...          ...          ...

有什么建议么?

更新:

这是最终由Seb提供帮助的代码:
#tweak for changing the calendar year to fiscal year
df$year <- as.numeric(format(as.Date(df$giftdate), format="%Y"))
df$month <- as.numeric(format(as.Date(df$giftdate), format="%m"))
df$year <- ifelse(df$month<=6, df$year, df$year+1)

#cum-summing :)
library(plyr)
finalDf <- ddply(df, .(year), summarize, cumsum(as.numeric(as.character(giftamt))))

最佳答案

我会这样尝试(df是数据框):

#tweak for changing the calendar year to fiscal year
df$year <- format(as.Date(df$date), format="%Y")
df$month <- format(as.Date(df$date), format="%m")
df$year <- ifelse(df$month<=6, year, year+1)

#cum-summing :)
library(plyr)
ddply(df, .(year), summarize, cumsum(giftamt))

关于R在每年年初将累计金额重置为零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8536529/

10-12 20:19