Membandingkan dan memfilter data berdasarkan stempel waktu menggunakan MATLAB?

Saya memiliki dua array sel, tb_ref dan tb_test, dengan isi sebagai berikut:

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};

Saya ingin memilih data dari kedua array di mana pun cap waktu cocok di keduanya dan menyimpannya dalam array sel baru. Misalnya 2009-04-13 10:50:00.000 cocok dengan kedua array maka array baru harus memiliki nilai berikut:

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

Dan seterusnya. Bagaimana saya bisa melakukan ini?


person Ankita Debnath    schedule 09.06.2017    source sumber
comment
Apakah ini table sebenarnya atau ini array sel? Sintaks spesifikasi tabel Anda tidak valid. Harap edit postingan Anda untuk memperjelas hal ini.   -  person rayryeng    schedule 09.06.2017
comment
Sebenarnya array selnya. Saya memodifikasinya. Mohon dilihat   -  person Ankita Debnath    schedule 09.06.2017
comment
Ini memiliki dua tabel berbeda yang dicatat sebagai stempel waktu yang disebutkan. Namun poin utama saya adalah memfilter data seperti yang disebutkan   -  person Ankita Debnath    schedule 09.06.2017
comment
Mengapa tabel atau array sel Anda menempatkan ' dan " secara acak?   -  person Sardar Usama    schedule 09.06.2017


Jawaban (1)


Untuk memastikan format tanggal cocok di seluruh set, mungkin yang terbaik adalah memformat tanggal di kedua set terlebih dahulu menggunakan 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'));

Sekarang, dengan asumsi setiap stempel waktu hanya dapat muncul satu kali dalam setiap set, Anda dapat menemukan entri umum menggunakan intersect dan menggabungkannya ke dalam array sel baru:

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

Dan inilah hasil yang harus Anda dapatkan untuk contoh di atas:

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
Ini tidak bekerja. Dikatakan mereka harus memiliki variabel yang sama. Kedua tabel berisi nilai parameter yang berbeda kecuali stempel waktu - person Ankita Debnath; 09.06.2017
comment
@AnkitaDebnath: Periksa versi terbaru ini. Saya memperbaiki kesalahan. - person gnovice; 09.06.2017
comment
Terima kasih. ini berfungsi dengan baik karena memiliki spesifikasi stempel waktu yang sama. Namun dalam kasus saya, saya memiliki dua tabel yang stempel waktunya diwakili dengan cara berbeda. Karena ini hanyalah contoh data yang saya berikan kepada Anda. Jadi tidak berlaku bagi saya untuk menggunakan ini. Saya mengubah pertanyaannya. Silakan lihat dan beri tahu saya apakah Anda dapat membantu saya dalam hal ini? - person Ankita Debnath; 09.06.2017
comment
@AnkitaDebnath: Saya telah memperbarui jawaban untuk menangani format tanggal yang berbeda. - person gnovice; 09.06.2017