如何通过R中的索引从数组中提取多个值

时间:2018-06-07 16:09:24

标签: arrays r matrix subset elements

我在数据框列中有索引,并希望根据这些索引提取数组的元素,希望有一个简单的子集函数?

我有一个3D数组(但适用于任意数量的维度) 例如:

a<-array(1:27,dim = c(3,3,3))

我可以提取单个元素

a[1,2,3]
[1] 22

我想根据索引提取多个元素。 假设我想要例如以表/数据帧格式给出的元素(1,2,3)= 22,(2,2,3)= 23和(3,1,1)= 3:

coords <- as.data.frame(rbind(c(1,2,3),c(2,2,3), c(3,1,1)))
colnames(coords) <- c("index1","index2","index3")
coords

  index1 index2 index3
1      1      2      3
2      2      2      3
3      3      1      1

致电(没有工作)

a[coords$index1,coords$index2,coords$index3]

我希望(但没有运气)这个调用的输出类似于向量

c(a[1,2,3],a[2,2,3],a[3,1,1])
[1] 22 23  3

我显然可以遍历这些指数,但我觉得有些东西我不知道......应该有更简单/更好的东西。

我已尝试过多项搜索和搜索,但我找不到任何可行的内容,所以如果已经在某个地方得到解答,请道歉。

1 个答案:

答案 0 :(得分:2)

你几乎是对的!您可以使用以下代码:

a<-array(1:27,dim = c(3,3,3))
coords <- cbind(rbind(c(1,2,3),c(2,2,3), c(3,1,1)))
colnames(coords) <- c("index1","index2","index3")
coords
a[coords]

不同之处在于使用cbind代替as.data.frame以及使用coords访问3d矩阵位置的方式。

总结一下,它必须是matrix而不是data.frame/list才能访问a的内容。

希望它有所帮助! :)