การเปรียบเทียบและกรองข้อมูลตามเวลาประทับโดยใช้ 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