计算5年或5年以上的长度间隔,其值在阈值以下,R 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)

我认为应用rle将是解决之道,但正在努力将其纳入组合。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)