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

How to extract multiple values from an array by indexes in R

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

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

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

我可以提取单个元素

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

我想根据索引提取多个元素。 假设我想要以 table/dataframe 格式给出的元素 (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

我显然可以遍历这些索引,但我觉得我缺少了一些东西..应该有一些东西 simpler/better。

我已经尝试了多种方法并进行了搜索,但我没有找到任何有效的方法,如果已经在某处回答了这个问题,我们深表歉意。

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

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.

的内容

希望对您有所帮助! :)