首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >稀疏矩阵的列联表

稀疏矩阵的列联表
EN

Stack Overflow用户
提问于 2016-12-27 14:34:12
回答 1查看 379关注 0票数 1

我有一个大的稀疏矩阵。现在,我想为所有对列的组合制作应急表。例如:假设我的稀疏矩阵是Mat

代码语言:javascript
运行
复制
D1   D2  D3  D4  D5  ..  Dn
1    0   1   0   0   ..  0
0    1   1   1   1   ..  1
..   ..  ..  ..  ..  ..  ..
1    0   1   0   1   ..  1

现在需要为Di和Dj的所有组合建立应急表,例如用于(D1,D2),(D1,D3),(D1,D4)的应急表。(D1,Dn),(D2,D3),(D2,D4) .(D2,Dn) .(Dn-1,Dn)

各列列表的结构

代码语言:javascript
运行
复制
 r1  r2
 r3  r4



#where r1 is total number of 1's in Di column 
#         r2 is total number of 1's in Di AND Dj column
#         r3 is total number of 1's in Di AND Dj column 
#         r4 is total number of 1's in Dj column

另外:

代码语言:javascript
运行
复制
for each i in (1:n-1) {
    for each j in (i+1 : n) {
        Calculate r1,r2,r3,r4
        create contingency table for Ri and Rj
        apply fisher test on that 
    }
}

我想要一些快速实现,因为它需要2-3天以上。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-27 15:34:51

这里有一个想法可以得到所有的2x2矩阵,

代码语言:javascript
运行
复制
fun1 <- function(x,y){
 matrix(data = c(sum(m1[,x]), sum(m1[,c(x,y)]), sum(m1[,c(x,y)]), sum(m1[,y])), 
                                                               nrow = 2, ncol = 2)
 }
#where m1 is your original matrix

ind1 <- combn(1:ncol(m1),2)[1,]
ind2 <- combn(1:ncol(m1),2)[2,]
final.list <- Map(fun1, ind1, ind2)

head(final.list, 2)
#[[1]]
#     [,1] [,2]
#[1,]    3    6
#[2,]    6    3

#[[2]]
#     [,1] [,2]
#[1,]    3    6
#[2,]    6    3

数据

代码语言:javascript
运行
复制
dput(m1)
structure(c(0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1), .Dim = c(6L, 
6L), .Dimnames = list(NULL, c("D1", "D2", "D3", "D4", "D5", "D6"
)))

或者类似的,

代码语言:javascript
运行
复制
fun2 <- function(x,y){
     matrix(data = c(c.sums[x], sum(c.sums[c(x,y)]), sum(c.sums[c(x,y)]), c.sums[y]),
                                                                    nrow = 2, ncol = 2)
 }

ind1 <- combn(1:ncol(m1),2)[1,]
ind2 <- combn(1:ncol(m1),2)[2,]
c.sums <- colSums(m1)

final.list2 <- Map(fun2, ind1, ind2)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41347172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档