3

For ループ ステートメントを使用せずに累積暖房度日を計算するにはどうすればよいですか? 私はRが初めてで、これを行う方法がよくわかりません。

私はこれをしたい:

for(i in 1:nrow(df)) {
    df$cumHDD <- df$HeatingDegreeDay[i] + df$cumHDD[i-1]
     i <- i+1
}

以下は私のデータです。

    SiteID SubstrateID  WinterID       Date HeatingDegreeDay cumHDD
1   NW_SB           B 2002_2003 2002-11-01        0.0000000      0
2   NW_SB           B 2002_2003 2002-11-02        0.0000000      0
3   NW_SB           B 2002_2003 2002-11-03        0.0000000      0
4   NW_SB           B 2002_2003 2002-11-04        0.0000000      0
5   NW_SB           B 2002_2003 2002-11-05        0.0000000      0
6   NW_SB           B 2002_2003 2002-11-06        0.0000000      0
7   NW_SB           B 2002_2003 2002-11-07        0.0000000      0
8   NW_SB           B 2002_2003 2002-11-08        0.0000000      0
9   NW_SB           B 2002_2003 2002-11-09        0.0000000      0
10  NW_SB           B 2002_2003 2002-11-10        0.0000000      0
11  NW_SB           B 2002_2003 2002-11-11        0.0000000      0
12  NW_SB           B 2002_2003 2002-11-12        0.0000000      0
13  NW_SB           B 2002_2003 2002-11-13        0.0000000      0
14  NW_SB           B 2002_2003 2002-11-14        0.0000000      0
15  NW_SB           B 2002_2003 2002-11-15        0.0000000      0
16  NW_SB           B 2002_2003 2002-11-16        0.0000000      0
17  NW_SB           B 2002_2003 2002-11-17        0.0000000      0
18  NW_SB           B 2002_2003 2002-11-18        0.0000000      0
19  NW_SB           B 2002_2003 2002-11-19        0.3724242      0
20  NW_SB           B 2002_2003 2002-11-20        0.0000000      0
21  NW_SB           B 2002_2003 2002-11-21        0.0000000      0
22  NW_SB           B 2002_2003 2002-11-22        0.0000000      0
23  NW_SB           B 2002_2003 2002-11-23        0.2773077      0
24  NW_SB           B 2002_2003 2002-11-24        0.2679310      0
25  NW_SB           B 2002_2003 2002-11-25        0.0000000      0

したがって、上記の私のデータでは、正しく行われると、次のようになります。

SiteID SubstrateID  WinterID       Date HeatingDegreeDay cumHDD
1   NW_SB           B 2002_2003 2002-11-01        0.0000000      0
2   NW_SB           B 2002_2003 2002-11-02        0.0000000      0
3   NW_SB           B 2002_2003 2002-11-03        0.0000000      0
4   NW_SB           B 2002_2003 2002-11-04        0.0000000      0
5   NW_SB           B 2002_2003 2002-11-05        0.0000000      0
6   NW_SB           B 2002_2003 2002-11-06        0.0000000      0
7   NW_SB           B 2002_2003 2002-11-07        0.0000000      0
8   NW_SB           B 2002_2003 2002-11-08        0.0000000      0
9   NW_SB           B 2002_2003 2002-11-09        0.0000000      0
10  NW_SB           B 2002_2003 2002-11-10        0.0000000      0
11  NW_SB           B 2002_2003 2002-11-11        0.0000000      0
12  NW_SB           B 2002_2003 2002-11-12        0.0000000      0
13  NW_SB           B 2002_2003 2002-11-13        0.0000000      0
14  NW_SB           B 2002_2003 2002-11-14        0.0000000      0
15  NW_SB           B 2002_2003 2002-11-15        0.0000000      0
16  NW_SB           B 2002_2003 2002-11-16        0.0000000      0
17  NW_SB           B 2002_2003 2002-11-17        0.0000000      0
18  NW_SB           B 2002_2003 2002-11-18        0.0000000      0
19  NW_SB           B 2002_2003 2002-11-19        0.3724242      0.3724242
20  NW_SB           B 2002_2003 2002-11-20        0.0000000      0.3724242
21  NW_SB           B 2002_2003 2002-11-21        0.0000000      0.3724242
22  NW_SB           B 2002_2003 2002-11-22        0.0000000      0.3724242
23  NW_SB           B 2002_2003 2002-11-23        0.2773077      0.6497319
24  NW_SB           B 2002_2003 2002-11-24        0.2679310      0.9176629
25  NW_SB           B 2002_2003 2002-11-25        0.0000000      0.9176629

ddplyステートメント内でこれを行うことはできますか? 他にもやるべき機能がいくつかあったので、上記を a 内で行うのもいいと思いましたddply

4

1 に答える 1

4

そのために使用する必要がありますcumsum

mydata$cumHDD<-with(mydata,cumsum(HeatingDegreeDay))

mydata があなたのデータであると仮定します。

mtcars データを使用した例ddply

library(plyr)
mydata<-mtcars
k<-ddply(mydata,.(cyl),summarize,cummpg=cumsum(mpg))

head(k,10)

cyl cummpg
1    4   22.8
2    4   47.2
3    4   70.0
4    4  102.4
5    4  132.8
6    4  166.7
7    4  188.2
8    4  215.5
9    4  241.5
10   4  271.9
于 2013-08-20T17:54:30.327 に答える