使用函数计算R中rolling windows中每window非零值的概率

Use a function to calculate probabilities of non-zero values per window in rolling windows in R

我有一个包含 0 和 1 的矩阵,如下所示:

set.seed(9900)
M = matrix(rbinom(50, 1, 0.2), 5, 10)
> M
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    1    0    0    0    0    0    0    0    0     0
[2,]    0    0    0    0    0    1    0    0    0     0
[3,]    0    0    0    0    0    0    0    0    0     0
[4,]    0    0    0    1    0    0    0    0    0     0
[5,]    0    1    0    1    0    0    0    0    0     0

并且我想要行的总和包含非零元素的概率。对于整个 M 矩阵,我可以使用以下代码:

prob = sum(colSums(t(M) !=0) !=0)/nrow(M)
> prob
[1] 0.8

但是,我想在滚动或滑动中使用此功能 windows,一次包含 5 列并移动每一列,这样我每个 window 就有一个“概率” .我知道“zoo”包有一些功能可以与滚动 windows 一起使用,但我不知道如何使它适应我的情况。有任何想法吗?谢谢!

使用zoo::rollapply。我不完全确定您的预期输出是什么,但这里有一段代码可以为每两行计算您的函数:

library(zoo)
rollapply(t(M), width = 5, FUN = function(x) sum(colSums(x !=0) != 0) / nrow(M), by.column = F, align = "right")
# [1] 0.6 0.6 0.6 0.6 0.2 0.2

注意:\ 是自 R 4.1 起 lambda-like 函数中 function 的快捷方式。