在R中按行和列从数据中调用多个值

时间:2013-08-29 20:56:34

标签: arrays r matrix dataframe

我在R工作,我想通过列和行索引从数据框中调用一组值。然而,这样做会产生矩阵而不是数组。我将证明:

鉴于data.frame:

a = data.frame( a = array(c(1,2,3,4,5,6,7,8,9), c(3,3)) )

(对于那些不想插入它的人来说,它看起来像这样)

  a.1 a.2 a.3
1   1   4   7
2   2   5   8
3   3   6   9

让我说我有两个数组指向我想要抓住的值

grab_row = c(3,1,2)
grab_col = c(1,2,1)

现在我希望这是我想要的代码......

a[ grab_row, grab_col ]

获得这些结果......

[1] 3 4 2

但这是一个3x3矩阵,它本身就足够了

  a.1 a.2 a.1.1
3   3   6     3
1   1   4     1
2   2   5     2

好吧,我也看到我的答案是在3x3矩阵的对角线上...但我真的宁愿坚持使用数组作为输出。

有什么想法?丹卡。

2 个答案:

答案 0 :(得分:4)

将行和列索引作为双列矩阵传递(这里使用cbind()构造)将获得您期望的元素:

a[cbind(grab_row, grab_col)]
[1] 3 4 2

这种索引形式记录在?"["

  

矩阵和数组:

     

[...剪断...]

     

第三种形式的索引是通过带有一个的数字矩阵   每个维度的列:然后是索引矩阵的每一行    选择数组的单个元素,结果是向量。

答案 1 :(得分:1)

试试这个:

> mapply(function(i,j)a[i,j], grab_row, grab_col)
[1] 3 4 2

适用于数据框和矩阵。