Как связать dimnames массива и индексные значения фрейма данных в R? - PullRequest
0 голосов
/ 28 мая 2019

у меня есть массив A

A
,,A
     [,1] [,2] [,3]
[1,]  3     7    8
[2,]  4     11   9
[3,]  2     12   4.3

,,B
     [,1] [,2] [,3]
[1,]  31    7    8
[2,]  4.2   4   9.5
[3,]  1     1    7

,,C
    [,1] [,2] [,3]
[1,]  4    71    8.3
[2,]  4    41    9 
[3,]  11   0     73

,,D
    [,1] [,2] [,3]
[1,]  7    7    8.3
[2,]  3    4.1    9 
[3,]  1    0.5    73

 dim(A)
3 3 4
dimnames(A)[3]
A   B    C   D   

и у меня есть data.frame df

df

 X  Y   Z
 2  1   A
 3  2   D

Я хотел бы поместить в новый столбец df значения массива A, основанные на df значениях индекса X (строка для массива), Y (столбец для массива) и третьего измерения Z, давайте скажем, мой побочный результат:

df

 X  Y   Z  Res
 2  1   A  4    # Res is the value of array A in A[2,1,"A"]
 3  2   D  0.5  # Res is the value of array A in A[3,2,"D"]

Я попробовал этот код:

df$Res <- NA
 if (df$Z == dimnames(A)[3]){
  for (i in 1:nrow(df)){ 
   df[i,4] <- A[df[i,1],df[i,2],df[i,3]]
 }
}

Но это не очень хорошо работает ... Любая идея связать dimnames массива третьего измерения и индекс-значение фрейма данных?

P.S. Это простой пример. Мой истинный массив:

dim(A)
    137  93  227 

и

dim(df)
6080 3

P.S.2 Я предпочитаю не использовать merge или подобный код другого типа для проблемы выделения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...