我有一个带有一堆捐赠数据的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/