我对R很陌生,我试图解决以下问题。
我想计算 a (只有一个)湿润日每月干燥一天的次数 - 这是所有年份的平均值。数据存储在data.frame中。或者说它很简单: 我想计算下一行(x + 1)的值> gt的次数;如果行x的值为零,则为0(月) - 所有年份的平均值。
我首先想到我可以像在stackoverflow论坛中那样尝试它,问题是比较下一行组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
所有帮助/提示/技巧都很受欢迎:)!
答案 0 :(得分:2)
这是我认为你正在寻找的data.table选项。首先,汇总每月和年的湿/干组合数。然后,仅计算每月的总和的平均值。
library(data.table)
setDT(dt)
dt[, list(drywetpermonth = sum(PCP > 0 & shift(PCP == 0), na.rm = TRUE)),
by = list(Year, Month)][
, list(drywetpermonth = mean(drywetpermonth)), by = Month]