R -使用Array索引数组



假设我有一个dim(x) <- c(3,3,3)数组。我还有一个df矩阵,它有两列,包含我需要的索引组合。

当我通过x[df[[1]],df[[2]],]时,我得到一个非常大的数组,然后我需要通过并使用apply函数的对角线。这是非常低效的内存和时间。是否有某种快捷方式(不使用for循环)来索引数组,以便它返回df请求的值向量。

小例子:

`a <- array(1:27,dim = c(3,3,3))
df <- data.frame(c(1,2,2,1,3,2),c(2,3,2,1,3,2))`

在这个例子中,我想传递一些类似"a[df[[1]],df[[2]],]"的东西然后得到像这样的(或转置):

. [,1] [,2] [,3] [,4] [,5] [,6] [1,] 4 8 5 1 9 5 [2,] 13 17 14 10 18 14 [3,] 22 26 23 19 27 23 当我现在传递这个函数时,我得到一个三维的dim = c(6,6,3)数组,而不是更有用的dim = c(6,3)数组。我可以很容易地采取apply(result, 3,diag)得到我想要的,但当df>>6它占用了大量的空间(如750GB的空间,并抛出警告,错误和开始前停止执行)

可以了

temp <- array(1:27, dim=c(3,3,3))
df <- data.frame(a=c(1,2,3), b=c(1,2,3), c=c(1,2,3))
temp[cbind(df[[1]], df[[2]], df[[3]])]
[1]  1 14 27

这有时被称为矩阵索引。

要查询两个维度,并保留第三个维度,您可能只使用常规矩阵子集:例如,为每个"z"维度矩阵选择第一,第二行和第二列,您可以使用temp[1:2, 2,]或从您的数据集:

temp[1:2, 2,]
     [,1] [,2] [,3]
[1,]    4   13   22
[2,]    5   14   23
temp[df[[1]][1:2], df[[2]][2], ]
     [,1] [,2] [,3]
[1,]    4   13   22
[2,]    5   14   23

当然是一样的

相关内容

  • 没有找到相关文章

最新更新