【发布时间】:2014-08-04 23:32:42
【问题描述】:
我有一个 100 万行的数据框,其中包含 2003-2010 年各个账户的每月用水量数据 (HCF):
> head(LeakyAccts)
ACCOUNT Date HCF
1 10114488 Oct 2010 25
2 10114488 Sep 2007 24
3 10114488 Nov 2006 11
4 10114488 Jun 2008 18
5 10114488 Aug 2003 6
6 10114488 Jan 2008 30
日期为yearmon。我想知道每个帐户与上一年同月相比每个月使用了多少。所以对于每一行,我想找出那个月的使用量(Date)和上一年同月的使用量(Date - 1)之间的差异。换句话说,我想要这个:
for(i in 1:nrow(LeakyAccts)) {
row <- which((LeakyAccts$ACCOUNT == LeakyAccts[i,]$UB_ACCT_NBR) & (LeakyAccts$Date == (LeakyAccts[i,]$Date - 1)))
if (length(row) == 1) { # no previous year for 2003
LeakyAccts[i,]$Difference <- LeakyAccts[i,]$HCF - LeakyAccts[row,]$HCF
}
}
不用说,这个循环需要几个小时才能运行,而且看起来非常不像 R。如何避免使用丑陋的 for 循环并加快计算速度?有没有办法使用apply 函数或data.table 来做到这一点?
【问题讨论】: