我在数据框列中有索引,并希望根据这些索引提取数组的元素,希望有一个简单的子集函数?
我有一个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
我显然可以遍历这些指数,但我觉得有些东西我不知道......应该有更简单/更好的东西。
我已尝试过多项搜索和搜索,但我找不到任何可行的内容,所以如果已经在某个地方得到解答,请道歉。
答案 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
的内容。
希望它有所帮助! :)