0

我有两个时间表,每个都有 4 列,其中前 2 列是我特别感兴趣的。第一列是日期,第二列是小时。

在此处输入图像描述

我怎么知道哪些观察(按日期一小时)在时间表 1 中但不在时间表 2 中,因此,从我的时间表 1 中删除这些观察?

因此,例如,仅通过查看,我就意识到时间表 1 包括 2015 年 5 月 25 日的第 1 和第 2 小时,但时间表 2 不包括它们,因此我想从时间表 1 中删除这些观察结果。

我尝试使用该命令groups_timetable1 = findgroups(timetable1.Date,timetable1.Hour);,但不幸的是,该命令并没有告诉您很多如何区分观察结果。

谢谢!

4

2 回答 2

1

调用ismember以在另一组中查找一组数据。要在另一个复合记录中查找多个记录作为一个组,请调用ismember(..., 'rows').

例如

baseline=[
  100, 2.1
  200, 7.5
  120, 11.0
];
isin=ismember(baseline,[200, 7.5],'rows');
pos=find(isin)

如果您有时间日期字符串或datetime对象,请将它们转换为数值,例如通过调用datenumposixtime首先。

于 2020-04-16T21:36:33.793 回答
1

您可以使用该timetable方法innerjoin来执行此操作。像这样:

% Fabricate some data
dates1 = datetime(2015, 5, ones(10,1));
hours1 = (1:10)';
timetable1 = timetable(dates1(:), hours1, rand(10,1), rand(10,1), ...
    'VariableNames', {'Hour', 'Price', 'Volume'});
% Subselect a few rows for timetable2
timetable2 = timetable1([1:3, 6:10],:);

% Use innerjoin to pick rows where Time & Hour intersect:
innerjoin(timetable1, timetable2, 'Keys', {'Time', 'Hour'})

默认情况下,结果innerjoin包含来自两个输入表的表变量 - 这可能是也可能不是您想要的。

于 2020-04-17T06:34:51.370 回答