仅当特定百分比的数据可用时才使用 rollapply 计算平均值

Calculate mean using rollapply only if certain percent of data is available

我有一列每小时数据,想用rollapply计算每小时的 24 小时滚动平均值。我的数据包含 NA,如果一个 24 小时内 75% 的数据可用,我只想计算滚动平均值,否则我希望考虑 24 滚动平均值 NA.

  df %>%
        mutate(rolling_avg = rollapply(hourly_data, 24, FUN = mean ,align = "right", fill = NA ))

如何修改以上代码来完成此操作?

定义一个函数来完全按照您所说的去做:

f <- function( v ) {
  if( sum(is.na(v)) > length(v)*0.25 ) return(NA)
  mean(v, na.rm = TRUE)
}

然后用它代替mean:

df %>% mutate(rolling_avg = rollapply(hourly_data, 24, FUN = f, 
                                     align = "right", fill = NA ))