如何通过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
.
的内容
希望对您有所帮助! :)
我在数据框列中有索引,想根据这些索引提取数组元素,希望使用简单的子集函数?
我有一个 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
.
综上所述,必须是 matrix
而不是 data.frame/list
才能访问 a
.
希望对您有所帮助! :)