【发布时间】:2016-06-23 10:01:36
【问题描述】:
我对 R 很陌生,我尝试解决以下问题。
我想计算每月一个(只有一个)潮湿的日子跟在干燥的日子之后的次数——所有年份的平均值。数据存储在 data.frame 中。或者说简单点: 我想计算下一行 (x+1) 的值 > 0 的次数,如果行 x 对于组(月)的值为零 - 所有年份的平均值。
我首先认为我可以尝试与在 stackoverflow 论坛中使用问题 compare to next row group data.table 相同的方式。不幸的是,我得到了错误:
Error in `[.data.frame`(weatherdata, , `:=`(PCPnextdat, PCP[match(Date + : unused argument (by = Month)
执行以下任务时:
weatherdata[, PCPnextdat := PCP[match(Date + 1, Date)] , by=Month]
数据文件中的重要列,我们称之为weatherdata具有以下结构,并且是36年的数据 - 从01Jan1979到31July2014:
Date Year Month Day PCP
1979-01-01 1979 01 01 0.000
1979-01-02 1979 01 02 0.987 <---- FIRST DAY
1979-01-03 1979 01 03 0.876
1979-01-04 1979 01 04 0.000
1979-01-05 1979 01 05 0.234 <---- SECOND DAY
1979-01-06 1979 01 06 0.000
1979-01-07 1979 01 07 0.123 <----- THIRD DAY
1979-01-08 1979 01 08 1.899
所以在这个例子中,旱天之后的雨天数是 3 天。
我已经找到了一种使用降水数据 (x+1) 制作新柱的方法。 通过使用:
weatherdataPCP.next <- weatherdata..5341$PCP[c(2:12986,1)]
这将给出:
Date Year Month Day PCP PCP.next
1979-01-01 1979 01 01 0.000 0.987 <--- ONE
1979-01-02 1979 01 02 0.987 0.876
1979-01-03 1979 01 03 0.876 0.000
1979-01-04 1979 01 04 0.000 0.234 <--- TWO
1979-01-05 1979 01 05 0.234 0.000
1979-01-06 1979 01 06 0.000 0.123 <--- THIRD
1979-01-07 1979 01 07 0.123 1.899
1979-01-08 1979 01 08 1.899 0.000
我想结束的是:
Month dry.wet.p.month
01 9.23
02 12.14
03 9.51
04 8.71
05 13.11
06 9.09
07 6.55
08 7.22
09 10.67
10 4.23
11 5.67
12 7.54
感谢所有帮助/提示/技巧 :) !
【问题讨论】:
-
不是5天吗?第一个 0 和 2 个非零,然后是第二个零和 1 个非零,然后是第三个零和 2 个非零。
-
感谢您的评论!我要改写一点。它是 A 湿天跟干天的次数。这也是我举这个例子的原因;)