Сравнение и фильтрация данных на основе метки времени с использованием MATLAB?

У меня есть два массива ячеек, tb_ref и tb_test, со следующим содержимым:

tb_ref = {'2009-04-13 10:50:00.000' 6.0708560 339.81910; ...
          '2009-04-13 11:00:00.000' 6.1039610 333.53540; ...
          '2009-04-13 11:10:00.000' 5.2654460 217.59230; ...
          '2009-04-13 12:00:00.000' 6.4318040 362.63540; ...
          '2009-04-13 12:10:00.000' 7.1082010 565.98960; ...
          '2009-04-13 12:20:00.000' 6.2918340 440.54640; ...
          '2009-04-13 12:50:00.000' 8.0200310 757.24960};

tb_test = {'13-Apr-2009 10:50:00' 3.1; ...
           '13-Apr-2009 11:00:00' 33; ...
           '13-Apr-2009 11:10:00' 21; ...
           '13-Apr-2009 11:20:00' 160; ...
           '13-Apr-2009 11:30:00' 143; ...
           '13-Apr-2009 11:40:00' 74; ...
           '13-Apr-2009 11:50:00' 39; ...
           '13-Apr-2009 12:00:00' 36; ...
           '13-Apr-2009 12:10:00' 56; ...
           '13-Apr-2009 12:20:00' 44; ...
           '13-Apr-2009 12:30:00' 20; ...
           '13-Apr-2009 12:40:00' 34; ...
           '13-Apr-2009 12:50:00' 75};

Я хочу выбрать данные из обоих массивов везде, где совпадает отметка времени в обоих, и сохранить их в новом массиве ячеек. Например, 2009-04-13 10:50:00.000 совпадает в обоих массивах, поэтому новый массив должен иметь следующие значения:

'2009-04-13 10:50:00.000'     6.0708560    339.81910    3.1

И так далее. Как я могу это сделать?


person Ankita Debnath    schedule 09.06.2017    source источник
comment
Это настоящий table или это массив ячеек? Синтаксис спецификации вашей таблицы неверен. Пожалуйста, отредактируйте свой пост, чтобы уточнить этот момент.   -  person rayryeng    schedule 09.06.2017
comment
На самом деле это массив ячеек. Я изменил его. Пожалуйста, посмотрите   -  person Ankita Debnath    schedule 09.06.2017
comment
У него есть две разные таблицы, записанные в виде метки времени упоминания. Однако моя главная цель - отфильтровать данные, как упомянуто в вопросе.   -  person Ankita Debnath    schedule 09.06.2017
comment
Почему в вашей таблице или массиве ячеек случайным образом размещены ' и "?   -  person Sardar Usama    schedule 09.06.2017


Ответы (1)


Чтобы обеспечить соответствие формата даты во всех наборах, вероятно, лучше сначала отформатировать даты в обоих наборах, используя datestr:

tb_ref(:, 1) = cellstr(datestr(tb_ref(:, 1), 'yyyy-mm-dd HH:MM:SS.FFF'));
tb_test(:, 1) = cellstr(datestr(tb_test(:, 1), 'yyyy-mm-dd HH:MM:SS.FFF'));

Теперь, предполагая, что каждая отметка времени может встречаться только один раз в каждом наборе, вы можете найти общие записи, используя intersect и объедините их в новый массив ячеек:

[dates, indexRef, indexTest] = intersect(tb_ref(:, 1), tb_test(:, 1));
tb_new = [dates tb_ref(indexRef, 2:3) tb_test(indexTest, 2)];

И вот результат, который вы должны получить для своего примера выше:

tb_new =

  7×4 cell array

    '2009-04-13 10:50:00.000'    [6.0709]    [339.8191]    [3.1000]
    '2009-04-13 11:00:00.000'    [6.1040]    [333.5354]    [    33]
    '2009-04-13 11:10:00.000'    [5.2654]    [217.5923]    [    21]
    '2009-04-13 12:00:00.000'    [6.4318]    [362.6354]    [    36]
    '2009-04-13 12:10:00.000'    [7.1082]    [565.9896]    [    56]
    '2009-04-13 12:20:00.000'    [6.2918]    [440.5464]    [    44]
    '2009-04-13 12:50:00.000'    [8.0200]    [757.2496]    [    75]
person gnovice    schedule 09.06.2017
comment
Это не работает. В нем говорится, что они должны иметь одну и ту же переменную. Две таблицы содержат разные значения параметров, кроме метки времени. - person Ankita Debnath; 09.06.2017
comment
@AnkitaDebnath: проверьте эту новейшую версию. Я исправил ошибку. - person gnovice; 09.06.2017
comment
Спасибо. он прекрасно работает с той же спецификацией метки времени. Но в моем случае у меня есть две таблицы, временная метка которых представлена ​​​​по-разному. Поскольку это всего лишь образец данных, которые я вам дал. Так что не подходит для меня, чтобы использовать это. Я изменил вопрос. Пожалуйста, посмотрите и скажите, можете ли вы помочь мне в этом? - person Ankita Debnath; 09.06.2017
comment
@AnkitaDebnath: я обновил ответ, чтобы он обрабатывал разные форматы даты. - person gnovice; 09.06.2017