【问题标题】:R: selecting a different row at every column efficientlyR:在每一列有效地选择不同的行
【发布时间】:2016-05-12 12:33:44
【问题描述】:

我有一个矩阵:

x = rbind(1:5, 6:10)
x
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10 

我想根据索引为每一列选择不同的行。例如,我可能想要一个看起来像的新向量

[1]  1  2  8  4 10

通过在适当的列中选择行c(1,1,2,1,2)。我可以这样做:

diag(x[c(1,1,2,1,2),])
[1]  1  2  8  4 10

但那是内存效率低下,因为它创建了这个矩阵:

x[c(1,1,2,1,2),]
    [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    1    2    3    4    5
[3,]    6    7    8    9   10
[4,]    1    2    3    4    5
[5,]    6    7    8    9   10

鉴于一个真实的数据集和多次迭代,我担心一个严重的性能问题。如何有效地根据我的索引提取相同的值?

【问题讨论】:

    标签: r performance subset


    【解决方案1】:

    我们可以使用row/column索引

     x[cbind(c(1,1,2,1,2), 1:ncol(x))]
     #[1]  1  2  8  4 10
    

    【讨论】:

    • 有趣。以前从不知道这是可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2018-12-09
    • 2011-02-21
    相关资源
    最近更新 更多