【问题标题】:How can I extract location information from adjacency matrix in R?如何从 R 中的邻接矩阵中提取位置信息?
【发布时间】:2019-05-22 22:07:26
【问题描述】:

我的邻接矩阵如下:

> matrix(c(0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0),ncol=4,byrow=T)
     [,1] [,2] [,3] [,4]
[1,]    0    1    0    0
[2,]    1    0    1    0
[3,]    0    1    0    1
[4,]    0    0    1    0

问题1:我怎样才能得到相应的信息,如: 2 5 7 10 12 15来自 R?

问题2:如何获取每行中'1'的位置信息,如:

2 
1 3 
2 4 
3 

2 1 3 2 4 3来自 R?

谢谢!

【问题讨论】:

    标签: r adjacency-matrix


    【解决方案1】:

    只需在逻辑矩阵上使用which

    which(m1 == 1)
    #[1]  2  5  7 10 12 15
    

    如果我们需要list中的列索引

    sapply(split(!!m1, col(m1)), which)
    

    或者作为向量

    na.omit(na_if(c(t(m1 * col(m1))), 0))
    #[1] 2 1 3 2 4 3
    

    数据

    m1 <- matrix(c(0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0),ncol = 4,byrow = TRUE)
    

    【讨论】:

    • 谢谢。 '1' 在每一行的位置呢,比如:2 1 3 2 4 3
    • 在行上使用apply()(或类似的),例如apply(m1, 1, function(x) which(x == 1))
    • @JohnColby - 或使用which(m1 == 1, arr.ind=TRUE),它将返回行/列索引。
    • @ChestnutT 我的回答是基于你最初的问题,我不知道你会更新更多问题
    【解决方案2】:
    m <- matrix(c(0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,0),ncol=4,byrow=T)
    mm <- m == 1
    which(mm)
    #[1]  2  5  7 10 12 15
    apply(mm, 1, which)
    #[[1]]
    #[1] 2
    #
    #[[2]]
    #[1] 1 3
    #
    #[[3]]
    #[1] 2 4
    #
    #[[4]]
    #[1] 3
    

    也许还可以看到raster::adjacency

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      相关资源
      最近更新 更多