r - 从矩阵列表创建 X % 概率矩阵

标签 r list loops matrix probability

我有一个矩阵列表(大约数十万)。我想创建一个矩阵,其中的单元格对应于例如95%。我的意思是:如果单元格 mat[1,2] 在 95% 的矩阵中为正(即 >0),则得分为 1,例如单元格 mat[2,1] 在 95% 的矩阵中为负(即 <0),其得分为 -1。如果低于此阈值,则得分为 0。

#Dummy data
listX <- list()
for(i in 1:10){listX[[i]]<-matrix(rnorm(n = 25, mean = 0.5, sd = 1),5,5)}
listX2 <- listX
for(i in 1:10) { listX2[[i]] <- ifelse(listX[[i]] >0, 1, -1) }

出于虚拟数据的考虑,可以将 95% 更改为 60%,这样在 10 个矩阵中的 6 个中保留其符号的单元格将被保留,并评分为 1 或 -1,其余评分为 0。

我陷入困境,因此无法提供更多代码。

最佳答案

我会这样做:

listX <- list()
set.seed(20)
# I set seed for reproducability, and changed your mean so you could see the negatives
for(i in 1:10){listX[[i]]<-matrix(rnorm(n = 25, mean = 0, sd = 1),5,5)}

threshold <- 0.7
(Reduce('+',lapply(listX,function(x){x > 0}))/length(listX) >= threshold) - (Reduce('+',lapply(listX,function(x){x < 0}))/length(listX) >= threshold)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0   -1    1
[2,]   -1    1   -1   -1    1
[3,]    0    0    0    1    1
[4,]    0    1    0    0    0
[5,]    0    0    0    0    0

这基本上检查两个条件,并将两个检查加在一起。分解条件之一(Reduce('+',lapply(listX,function(x){x > 0}))/length(listX) > threshold)

lapply(listX,function(x){x > 0})循环遍历每个矩阵,并将其转换为每个大于零的值的真/假矩阵。

Reduce('+',lapply(listX,function(x){x > 0}))/length(listX)然后将它们全部加在一起( Reduce ),并除以观察次数。如果该比例大于我们的阈值,我们将该值设置为 1,如果不是,则将该值设置为零。

然后我们用 x < 0 减去相同的矩阵作为测试,给出 -1在每种情况下都有足够的子值为负数。

关于r - 从矩阵列表创建 X % 概率矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42428184/

相关文章:

python - 列表python中的多个最大值

php - 显示一系列可以隐藏/显示的youtube嵌入

javascript - 在 Canvas HTML5 中循环网格并在方 block 之间使用 "gaps"?

r - clusterExport到R并行中的单线程

R预测警告

r - mapply 有多个参数,其中一个参数是常量(数据)

list - 如何在 Flutter 中将 map 列表显示到 DropdownMenuItem

c++ - 暴露的编程面试错误 : Linked Lists

r - 比较 R [r] 中两个不同长度的 data.frames

python - 按 Ctrl+C 后如何让 Python 在程序停止之前完成作业?