我在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矩阵的对角线上...但我真的宁愿坚持使用数组作为输出。
有什么想法?丹卡。
答案 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
适用于数据框和矩阵。