Как извлечь несколько значений из массива по индексам в R - PullRequest
0 голосов
/ 07 июня 2018

У меня есть индексы в столбцах фрейма данных, и я хотел бы извлечь элементы массива на основе этих индексов, надеюсь, с помощью простой функции подмножества?

У меня есть 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

Я, очевидно, мог бы пройтись по этим индексам, но я чувствую, что что-то упускаю ... должно быть что-то более простое / лучшее.

Я пробовал несколько вещей и поисков, но я ничего не нашелэто работает, поэтому извиняюсь, если на этот вопрос уже был дан ответ.

1 Ответ

0 голосов
/ 07 июня 2018

Вы были почти правы!Вы можете использовать следующий код:

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 и в способе доступа к 3D-позиции матрицы с помощью coords.

Подводя итог, это должно быть matrix вместо data.frame/list, чтобы иметь доступ к содержимому a.

Надеюсь, это поможет!:)

...