【问题标题】:Comparing and filtering data based on timestamp using MATLAB?使用MATLAB根据时间戳比较和过滤数据?
【发布时间】:2017-06-09 14:42:34
【问题描述】:

我有两个元胞数组tb_reftb_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

等等。我该怎么做?

【问题讨论】:

  • 这是一个实际的table 还是一个元胞数组?您的表规范的语法无效。请编辑您的帖子以澄清这一点。
  • 其实就是它的元胞数组。我修改了它。请看一下
  • 它有两个不同的表记录在提及时间戳中。但是我的主要观点是过滤数据作为问题提及
  • 为什么您的表格或元胞数组随机放置了'"

标签: matlab sorting timestamp


【解决方案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]

【讨论】:

  • 它不工作。它说它们必须具有相同的变量。这两个表包含不同的参数值,除了时间戳
  • @AnkitaDebnath:检查这个最新版本。我修正了一个错误。
  • 谢谢。具有相同的时间戳规范非常有用。但在我的情况下,我有两个表,其时间戳以不同的方式表示。因为这只是我给你的数据样本。所以不适用于我使用它。我修改了问题。请看看并告诉我你能帮我吗?
  • @AnkitaDebnath:我已经更新了处理不同日期格式的答案。
猜你喜欢
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多