транспонирование кусков данных в Matlab - PullRequest
0 голосов
/ 30 ноября 2018

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

TIME  PAR  ETS  
01:30  0     0  
01:30  40    300  
01:30  100   500
.  
01:30  1500 800  

, за которым следует следующий раз

02:30 0     0  
02:30 40    344  
02:30 100   653  
.  
.  
02:30  1500 1700  

и так каждый час или около того я получаю кривую PAR против ETS, но все данные суммируютсяодин под другим, но я бы предпочел, чтобы у меня был файл с одним столбцом PAR, и каждый столбец ETS располагался рядом со временем в качестве заголовка:

PAR   01:30   02:30  
   0      0       0  
  40      300     344  
  100     500     653
.  
.  
1500      800    1700  

Надеюсь, я был ясен.Было бы возможно сделать это в Matlab, поскольку я новичок, но я хотел бы начать с чего-нибудь.Большое спасибо.

1 Ответ

0 голосов
/ 02 декабря 2018

Если значения для PAR идентичны для каждого периода времени (как в вашем примере).Тогда вы можете использовать unique и table/join для построения вашей транспонированной таблицы.

Сначала используйте unique, чтобы получить имена столбцов из столбца time и значения для столбца PAR.Например,

T = readtable('data.txt');
var_names = unique(T.TIME); 
row_values = unique(T.PAR);

Затем создайте базовую таблицу со значениями PAR в качестве первого столбца

pivotTable = table(row_values,'VariableNames',{'PAR'});

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

  1. Выбор строк для определенного time для создания вложенной таблицы для одного набора time значений
  2. Установка таблиц ETS имя столбца с текущим time значением.Обратите внимание, что значения времени, такие как 01:30, не являются допустимыми именами переменных.Таким образом, вы можете использовать matlab.lang.makeValidName для преобразования этих значений в соответствующие имена для столбцов таблицы.
  3. Используйте объединение, чтобы добавить эту вложенную таблицу в базовую таблицу

Здесьпример того, как это будет работать:

for v = var_names'
    selected_rows = strcmp(T.TIME,v{1});
    subTable = T(selected_rows,{'PAR', 'ETS'});
    subTable.Properties.VariableNames{2} =matlab.lang.makeValidName(v{1});        
    pivotTable = join(pivotTable,subTable);
end
...