计算5年或5年以上的长度间隔,其值低于阈值,且在R?中没有超过阈值3年的后续序列?

计算5年或5年以上的长度间隔,其值低于阈值,且在R?中没有超过阈值3年的后续序列?,r,rle,R,Rle,我试图计算平均值低于指定阈值(测量值%变异(上一个低于标准c(低于标准[1],低于标准[1:(n()-1)]) data_test$start_of_run=0 35;创建指示符变量 _运行的数据_test$start_[其中(数据_test$lower_crit==1和数据_test$prev_lower_crit==0)]=1#如果当前值低于crit而上一个值高于crit,则这是一系列的开始 data_test=data_test%>%group_by(person_id)%>%mutate

我试图计算平均值低于指定阈值(测量值<0.5)的5年或5年以上的数量,但不包括连续3年或3年以上的数值超过指定阈值的情况

数据类似于此练习(连续测量系列和观测值),我运行了以下代码,但它仅适用于计算单个事件,而不包括5年,即3年

library(dplyr)
# create dumy-data
set.seed(123)
data_test = data.frame(measure = rnorm(100, 3.5,2), person_id = rep(1:10, each = 10), measure_id = rep(1:10, 10))

data_test$below_criterion = 0 # indicator for measures below crit-value
data_test$below_criterion[which(data_test$measure < 3.9)] = 1 # indicator for measures below crit-value

# indicator, that shows if the current measurement is the first one below crit_val in a possible series
# shift columns, to compare current value with previous one
data_test = data_test %>% group_by(person_id) %>% mutate(prev_below_crit = c(below_criterion[1], below_criterion[1:(n()-1)]))
data_test$start_of_run = 0 # create the indicator variable
data_test$start_of_run[which(data_test$below_criterion == 1 & data_test$prev_below_crit == 0)] = 1 # if current value is below crit and previous value is above, this is the start of a series
data_test = data_test %>% group_by(person_id) %>% mutate(grouper = cumsum(start_of_run)) # helper-variable to group all the possible series within a person

data_test = data_test %>% select(measure, person_id, measure_id, below_criterion, grouper) # get rid of the previous created helper-variables

data_results = data_test %>% group_by(person_id, grouper) %>% summarise(count_below_crit = sum(below_criterion)) # count the length of each series by summing up all below_crit indicators within a person and series

data_results = data_results %>% group_by(person_id) %>% filter(count_below_crit >= 3 & count_below_crit <=24) %>% summarise(n()) # count all series within a desired length for each person
data_results

data.frame(data_test)
库(dplyr)
#创建dumy数据
种子集(123)
数据测试=数据帧(测量=形式(100,3.5,2),人员id=代表(1:10,每个=10),测量=代表(1:10,10))
数据测试$低于标准=0#低于临界值的度量指标
数据测试低于标准[其中(数据测试$measure<3.9)]=1#低于临界值的测量指标
#指示器,显示当前测量值是否是可能系列中低于临界值的第一个
#shift列,将当前值与上一个值进行比较
数据检验=数据检验%>%分组依据(个人id)%>%变异(上一个低于标准c(低于标准[1],低于标准[1:(n()-1)])
data_test$start_of_run=0 35;创建指示符变量
_运行的数据_test$start_[其中(数据_test$lower_crit==1和数据_test$prev_lower_crit==0)]=1#如果当前值低于crit而上一个值高于crit,则这是一系列的开始
data_test=data_test%>%group_by(person_id)%>%mutate(grouper=cumsum(start_of_run))#helper变量将一个人内所有可能的序列分组
data_test=data_test%>%选择(度量值、人员id、度量值id、低于标准、grouper)#删除先前创建的帮助器变量
数据结果=数据测试%>%分组依据(个人id,grouper)%>%总结(低于标准的计数=总和)(低于标准的计数)#通过汇总个人和系列中所有低于标准的指标来计算每个系列的长度
data_results=data_results%%>%group_by(person_id)%%>%filter(低于标准计数>=3&低于标准计数%Summary(n())#统计每个人所需长度内的所有序列
数据和结果
数据帧(数据测试)
我认为应用rle将是一个不错的选择,但我正在努力将其融入到组合中