【问题标题】:How to get all elements at indices stored in a vector?如何获取存储在向量中的索引处的所有元素?
【发布时间】:2016-02-10 11:34:11
【问题描述】:

我有一个矩阵,其中每一行都由零和一个单行组成,比如y <- rbind(c(1,0,0), c(0,1,0), c(0,1,0)),我有一个为每一行保存索引的向量,比如x <- c(1,2,3) 和。现在我想计算y[i,x[i]] == 1 持有的次数。我知道我可以这样做

count <- 0
for(i in 1:3)
    count <- count + y[i, x[i]]

但如果有更聪明的方法,我很感兴趣。像count &lt;- sum(y[,x]) 这样的东西。这当然行不通,因为y[,x] 给出了一个矩阵。

因此,我的问题是有没有办法通过使用 apply 或任何其他智能技巧(即不使用 for-loops)来获取具有另一个向量给定位置的元素的向量?

我一直在寻找这个,但我真的不知道如何调用它,因此我没有找到任何有用的东西。如果这个问题已经在某个地方徘徊,我们深表歉意......

【问题讨论】:

    标签: r indexing


    【解决方案1】:

    我们可以使用row/column索引提取'x'和'y'索引对应的元素,然后得到sum

    sum(y[cbind(1:nrow(y), x)])
    #[1] 2
    

    如果值不等于 1,

    sum(y[cbind(1:nrow(y), x)]==1)
    

    或者对于这种情况,

    sum(diag(y)==1)
    #[1] 2
    

    或者

    sum(y*diag(y))
    

    编辑:根据 cmets 将行/列索引从 cbind(x,1:ncol(y)) 更改为 cbind(1:nrow(y), x)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 2012-06-05
      相关资源
      最近更新 更多