【问题标题】:Calculating the mean for intervalls within a variable计算变量内区间的平均值
【发布时间】:2020-04-03 08:16:57
【问题描述】:

假设我有一个数据集,例如: dat <- rnorm(25) 和一个向量,它代表我的数据的特定索引:v <- c(1, 8, 13, 17, 25)

如何计算以下区间的平均值:1-1、1-8、8-13、13-17、17-25?

一般来说:我想根据索引向量 vdat 内的特定间隔进行平均,这很有意义,但也很不规则。

【问题讨论】:

  • 欢迎来到 Stack Overflow。到目前为止,您尝试过什么?

标签: r mean


【解决方案1】:

您可以使用cut 获取区间组,使用aggregate 计算每个组的mean

aggregate(dat, list(interval=cut(seq(dat), c(0,v))), mean)
#  interval          x
#1    (0,1] -0.5604756
#2    (1,8]  0.3484638
#3   (8,13]  0.1704305
#4  (13,17]  0.4599013
#5  (17,25] -0.6754733

或者,如果您希望第一个和最后一个位置的间隔重叠,您可以使用sapply

sapply(seq(v), function(i) mean(dat[v[max(1,i-1)]:v[i]]))
#[1] -0.56047565  0.23484641 -0.06881816  0.44807533 -0.54510397

【讨论】:

    【解决方案2】:

    我们可以使用findInterval 组成群组,并使用tapply 获取每个群组的mean

    tapply(dat, findInterval(seq_along(dat), v, left.open = TRUE), mean)
    
    #         0          1          2          3          4 
    #-0.5604756  0.3484638  0.1704305  0.4599013 -0.6754733 
    

    数据

    set.seed(123)
    dat <- rnorm(25)
    v <- c(1, 8, 13, 17, 25)
    

    【讨论】:

      【解决方案3】:

      使用dplyr

      library(dplyr)
      tibble(x = dat) %>% 
          group_by(Interval = findInterval(row_number(), v, left.open = TRUE)) %>% 
          summarise(x = mean(x))
      

      【讨论】:

        【解决方案4】:

        您可以使用split()cut()创建组,然后通过sapply计算每个组中的均值,即,

        r <- sapply(split(dat,cut(seq_along(dat), c(-Inf,v))),mean)
        

        示例

        set.seed(1)
        dat <- rnorm(25)
        v <- c(1, 8, 13, 17, 25)
        r <- sapply(split(dat,cut(seq_along(dat), c(-Inf,v))),mean)
        

        给予

        > r
          (-Inf,1]      (1,8]     (8,13]    (13,17]    (17,25] 
        -0.6264538  0.2397270  0.3101554 -0.2877232  0.3456389 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-10
          • 2021-08-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多