Есть ли аналогичная функция «плавить» в reshape2 в R, которая работает в MatLab?

Я пытаюсь найти в MatLab функцию, аналогичную функции «плавления» в пакете R «reshape2», так что заголовки строк повторяются для каждой переменной и складываются вместе.

e.g.:

Если у меня есть матрица

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

Я хотел бы изменить его на

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

Если не считать работы с циклом for() для попарного просмотра каждого столбца, есть ли функция, которая могла бы это сделать?

Большое спасибо, КРБ


person Kyle Broadfoot    schedule 18.01.2016    source источник
comment
Это зависит от того, как вы определяете матрицу. В зависимости от того, как она определяется, для решения этой проблемы используются разные решения. Какой код вы использовали для определения этой матрицы? Матрицы MATLAB по умолчанию не поддерживают заголовки строк, поэтому какой тип данных вы используете для определения этой матрицы?   -  person rayryeng    schedule 19.01.2016


Ответы (1)


В Matlab есть функции stack и unstack, работающие с таблицами, которые аналогичны melt и cast. Что-то вроде этого будет работать

groups = {'A'; 'B'; 'C'};
A1 = [1; 4; 7];
A2 = [2; 5; 8];
A3 = [3 ; 6; 9];

T = table(groups, A1, A2, A3)
TLong = stack(T, 2:4)

который дает

TLong = 

    groups    A1_A2_A3_Indicator    A1_A2_A3
    ______    __________________    ________

    'A'       A1                    1       
    'A'       A2                    2       
    'A'       A3                    3       
    'B'       A1                    4       
    'B'       A2                    5       
    'B'       A3                    6       
    'C'       A1                    7       
    'C'       A2                    8       
    'C'       A3                    9       

Обратите внимание, что матрица вашего примера не может существовать в Matlab (или R), поскольку матрицы не могут содержать строки или смешанные типы. Я рекомендую вам преобразовать любую структуру, которая у вас есть сейчас, в table, если вы хотите использовать встроенную функцию.

person Alex    schedule 19.01.2016