2016-06-23 5 views
0

У меня проблема с подмножеством значений массива.Извлечение значений массива на основе значений в разных измерениях

raw.table <- array(data = c(1:12,13:24,rep(1:6, each=2)), 
        dim=c(3,4,3), 
        dimnames=list(LETTERS[1:3],1:4,c("target","ctrl","samples"))) 

Первые два аспекта моего массива представляют некоторые значения, которые я хочу сделать статистику, и более высокие размеры содержат различные атрибуты, которые я хочу использовать для доступа к определенным подмножеств. В этом случае у меня есть только номера образцов, тогда как всегда есть два значения, присвоенные одному и тому же номеру выборки (репликации измерений).

, , target 

    1 2 3 4 
A 1 4 7 10 
B 2 5 8 11 
C 3 6 9 12 

, , ctrl 

    1 2 3 4 
A 13 16 19 22 
B 14 17 20 23 
C 15 18 21 24 

, , samples 

    1 2 3 4 
A 1 2 4 5 
B 1 3 4 6 
C 2 3 5 6 

Как получить доступ к значениям в размерности 1 (= мишень), которые имеют один и тот же номер образца, обозначенный в размерности 3 (= образцов)? Я опробовал различные подходы, используя unique(), duplicated() и match(), но не придя к результату. Я просто не могу обернуть мою голову об индексации массивов -.-

Приветствия, zuup

+0

Каков ваш ожидаемый выход? Возможно, 'which (raw.table [,, 1] == raw.table [,, 3])' – akrun

+0

Мой желаемый результат был бы вектором двух значений в 'raw.table [,, 1]', которые соответствуют тот же номер образца в 'raw.table [,, 3]'. Поэтому я не хочу сравнивать значения разных измерений (см. Ваш ответ), а скорее сравнивать внутри одного измерения и использовать результат для индексирования значений в другом измерении. – Zuup

+0

Я понимаю это, но я думаю, у вас есть только два элемента для сравнения, например, «target» и «samples» или есть что-то, чего мы не знаем. – akrun

ответ

0

Формы логического индекса с логическим тестом (по измерениям):

> raw.table[,,1] == raw.table[,,3] 
     1  2  3  4 
A TRUE FALSE FALSE FALSE 
B FALSE FALSE FALSE FALSE 
C FALSE FALSE FALSE FALSE 

И использовать его выбрать элементы из первого измерения (и, так как они будут одинаковой длиной нет рециркуляции):

> raw.table[, , 1 ][ raw.table[,,1] == raw.table[,,3] ] 
[1] 1 

Цепной вызовы к Extract-оператору вполне приемлемо в R

Смежные вопросы