【问题标题】:Averages per time-steps每个时间步的平均值
【发布时间】:2022-01-19 08:26:49
【问题描述】:

我正在处理 24 小时的时间使用数据。如果进行了测量,则时间步长为 1,否则为 0。我想计算一段时间内的平均测量计数。根据下面的例子,他的意思是首先我需要对每列求和并乘以时间步长,例如:t1 x (1+0+1) + t2 X (0+1+0) + t3 x (1+1+1),然后除以计数总和((1+0+1)+(0+1+0)+(1+1+1))。关于时间步长t1=1, t2=2 and t3=3。因此[(1 x 2) + (2 x 1) + (3 x 3)] / (2+1+3) = 13 / 6 = 2.16。我怎样才能为n 时间步实现这个?

例子:

id   t1 t2 t3
 10   1  0  1
 12   0  1  1
 14   1  0  1

输出:AvgC=2.16

样本数据:

df<-structure(list(id = c("10", "12", "14"), t1 = c(1, 0, 1), t2 = c(0, 
1, 0), t3 = c(1, 1, 1)), class = "data.frame", row.names = c(NA, 
-3L))

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    使用自写函数的 Base R 的另一种解决方案:

    calcAverage <- function(df, dt){
      vector4df <- 1:(ncol(df)-1)*dt
      nom <- sum(as.matrix(df[,(2:ncol(df))]) %*% vector4df)
      denom <- sum(as.matrix(df[,(2:ncol(df))]))
      return(nom/denom)
    }
    
    calcAverage(df, 1)
    2.166667
    

    我添加了定义 dt 的选项,这意味着“测量之间的等距时间步长”。所以当 dt=1 时,每隔一小时进行一次测量,当 dt =2 时,每隔一小时(2,4,6,...)进行一次测量。

    【讨论】:

    • 我在函数下面添加了一个简短的解释。
    【解决方案2】:

    Base R

    time_step = c(1,2,3) # or 1:3
    sum(time_step * colSums(df[,-1])) / sum(df[,-1])
    
    # 2.166667
    

    【讨论】:

      猜你喜欢
      • 2014-07-29
      • 1970-01-01
      • 2015-08-10
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多