我有一个包含“日期”、"Snow_depth“和"hydro_year”列的dataframe。"Snow_depth"-column包含0-150的值。为了识别连续雪日的数量和长度,即“雪深”-values大于0的天数,我尝试添加一个列,其中包含从第一个“雪深”-value大于0开始的升序数字,并以“雪深度”-column+零/NAs的下一个0结尾,每一行的“雪深”-value为0。一旦我得到了这个,我就会计算新列的"2"-values数(因为2天是雪期的最小值),以检测周期的数量,并过滤每个水文年的最高和最低值,以检测最大长度和最小长度。
有人知道如何创建我描述的那个专栏吗?
我需要的是这样的:
Snow_depth: 0,0,5,7,8,4,0,0,6,5,8,9,5,6,0,8,6.
New_column: 0,0,1,2,3,4,0,0,1,2,3,4,5,6,0,1,2.
任何帮助都是非常感谢的!谢谢!
发布于 2021-07-06 21:18:03
您可以在这里使用purrr:accumulate()。首先使用snow_depth !=0创建逻辑向量,而不是使用if_else进行调用累积。
library(purrr)
library(dplyr)
df%>%mutate(consecutive_days=accumulate(snow_depth!=0, ~if_else(.y!=0, .x+1, 0)))
snow_depth new_column consecutive_days
1 0 0 0
2 0 0 0
3 5 1 1
4 7 2 2
5 8 3 3
6 4 4 4
7 0 0 0
8 0 0 0
9 6 1 1
10 5 2 2
11 8 3 3
12 9 4 4
13 5 5 5
14 6 6 6
15 0 0 0
16 8 1 1
17 6 2 2数据
df<-data.frame(snow_depth=c(0, 0, 5, 7, 8, 4, 0, 0, 6, 5, 8, 9, 5, 6, 0, 8, 6),
new_column=c(0, 0, 1, 2, 3, 4, 0, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2))https://stackoverflow.com/questions/68276939
复制相似问题