首页 > 解决方案 > 如何找到每个因子/水平的连续正值的平均数?

问题描述

我正在处理天气数据,并且每年我都想找到温度大于 0 的连续天数的平均值和标准偏差 (SD)。

我试过group_by使用sequence,但我不确定如何将计算连续天的平均值(或 SD)的需要与正温度结合起来。

这是数据的片段:

season<-c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)
temp<-c(4,3,0,2,-1,2,2,2,-2,1,0,1,0,1,0)

df<-cbind(season,temp)

我想要一个表格,列出季节的平均值和连续正温度数的 SD,如下所示:

这个.

例如,在第 1 季中,前 2 天高于 0,第 4 天高于 0,因此均值 =(2+1)/2。

     season consec_positive_mean consec_positive_SD
[1,]      1                  1.5                0.5
[2,]      2                  2.0                0.3
[3,]      3                  1.0                0.0

我该如何解决这个问题?

标签: r

解决方案


您可以创建第一个小功能:

ConsecMean <- function(x) { 
    x <- ifelse(x > 0, 0, 1) 
    cs <- cumsum(x) 
    cs <- cs[x == 0] 
    mean <- mean(table(cs)) 
    return(mean) 
    } 
ConsecSD <- function(x) { 
    x <- ifelse(x > 0, 0, 1) 
    cs <- cumsum(x) 
    cs <- cs[x == 0] 
    sd <- sd(table(cs)) 
    return(sd) 
    } 

然后使用group_byfrom dplyr 应用它:

df %>% 
    group_by(season) %>% 
    summarise(mean = ConsecMean(temp), sd = ConsecSD(temp))

输出 :

 # A tibble: 3 x 3
  season  mean    sd
   <dbl> <dbl> <dbl>
1      1   1.5 0.707
2      2   2   1.41 
3      3   1   0    

但是,我不确定在您的情况下如何计算 SD


推荐阅读