根据R中的前一个值和后一个值设置值的条件

时间:2014-11-17 14:09:33

标签: r

我正在尝试评估给定数据集中的干咒数。

以下是数据示例 (沉淀是指每日总降水量)

        date precip index
 1976-01-15   11.4     0
 1976-01-16   10.3     0
 1976-01-17    3.2     0
 1976-01-18    0.0     1
 1976-01-19    1.2     0
 1976-01-20    1.7     0
 1976-01-21    3.1     0
 1976-01-22    9.2     0
 1976-01-23    4.6     0
 1976-01-24    1.9     0
 1976-01-25    0.0     1
 1976-01-26    0.1     1
 1976-01-27    0.2     0
 1976-01-28    0.0     1
 1976-01-29    0.0     1
 1976-01-30    0.0     1

已创建列索引以将干燥天数与潮湿天数分开。干燥天数定义为总降水量不超过0.2mm的天数,指数为1.超过0.2mm的天数被认为是潮湿的,并且指数为0.

然而,我想补充另一个条件,如果一天相对干燥(降水不超过1毫米)并且在干燥(<0.2毫米)的天数之间继续干燥。 (例如1976-01-27将被视为干燥日,并且将有一个6天的干咒,而不是两个较短的咒语。)

        date precip index
 1976-01-15   11.4     0
 1976-01-16   10.3     0
 1976-01-17    3.2     0
 1976-01-18    0.0     1
 1976-01-19    1.2     0
 1976-01-20    1.7     0
 1976-01-21    3.1     0
 1976-01-22    9.2     0
 1976-01-23    4.6     0
 1976-01-24    1.9     0
 1976-01-25    0.0     1
 1976-01-26    0.1     1
 1976-01-27    0.2     1
 1976-01-28    0.0     1
 1976-01-29    0.0     1
 1976-01-30    0.0     1

我真的会给予任何帮助或建议。非常感谢你! :)

1 个答案:

答案 0 :(得分:2)

使用dplyr的lag和lead函数,你可以这样做:

require(dplyr)
mutate(df, index2 = (index | (precip <= 1 & lag(index) & lead(index))) + 0L)
#         date precip index index2
#1  1976-01-15   11.4     0      0
#2  1976-01-16   10.3     0      0
#3  1976-01-17    3.2     0      0
#4  1976-01-18    0.0     1      1
#5  1976-01-19    1.2     0      0
#6  1976-01-20    1.7     0      0
#7  1976-01-21    3.1     0      0
#8  1976-01-22    9.2     0      0
#9  1976-01-23    4.6     0      0
#10 1976-01-24    1.9     0      0
#11 1976-01-25    0.0     1      1
#12 1976-01-26    0.1     1      1
#13 1976-01-27    0.2     0      1
#14 1976-01-28    0.0     1      1
#15 1976-01-29    0.0     1      1
#16 1976-01-30    0.0     1      1

+0L将逻辑值(TRUE / FALSE)转换为整数值(1/0)。