使用函数计算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
的快捷方式。
我有一个包含 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
的快捷方式。