У меня есть высокий MATLAB table так:Как я могу эффективно развернуть таблицу с репликациями в MATLAB от высокого до широкого формата?
spam =
Data cat1 cat2 time
__________ ___________ __________ ______
-0.41763 1 0 0
0.11719 1 0 0
... ... ... ...
-0.16546 1 0 1
... ... ... ...
-0.21763 1 0 2
0.31719 2 0 0
... ... ... ...
0.58116 3 1 0
... ... ... ...
Data
является двойной формат, cat1
(8 уровней) и cat2
(3 уровней) категоричны, и time
(3 уровня) является порядковым (но может быть в два раза). Каждая точка времени каждого уровня cat1
и cat2
включает 30 (технических) повторов (обозначенных ...
выше).
Я хочу использовать эти данные в fitrm
, что требует их в широком формате. Поэтому мне нужно преобразовать столбец Data
в три отдельные переменные.
Использование unstack
я получаю что-то вроде этого:
spam = unstack(spam, 'Data', 'time')
Warning: Variable names were modified to make them valid MATLAB identifiers.
spam =
cat1 cat2 x0 x1 x2
______ _________ ___________ _______ ________
1 0 -7.6605e-15 2.3168 0.45234
2 0 6.2172e-15 5.1661 24.89
3 1 8.8818e-16 56.697 40.441
4 1 -7.9936e-15 -22.741 -17.191
5 1 -1.4433e-15 -7.7803 -20.817
6 2 5.5511e-16 7.8535 -0.21172
7 2 5.3291e-15 13.658 5.8402
8 2 2.2204e-15 9.1739 13.814
Очевидно, что этот результат не включает в себя всю информацию, в высокой таблице. В частности, репликации не были перенесены в результат.
Использование accumarray
, так же, как показано на рисунке in another stack page, может быть многообещающим, но в моем случае было бы проще выполнить одноразовое преобразование вручную.
Кому-нибудь известно о более эффективном подходе?
Если вы собираетесь самостоятельно ответить на ваш вопрос, нужно больше информации, чем ссылка на другой ответ. –
Спасибо, что сообщили мне об этике @AnderBiguri. Я добавил пример в свой ответ. – vkehayas