MATLAB отбрасывает наблюдения из расписания, не содержащегося в другом расписании - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть два расписания, каждое из которых имеет 4 столбца, где первые 2 столбца представляют мой особый интерес. В первом столбце указывается дата, а во втором - час.

enter image description here

Как узнать, какие наблюдения (по дате и часам) находятся в расписании 1, но не в расписании 2 и, следовательно, исключить эти наблюдения из моего расписания 1?

Так, например, просто взглянув, я понял, что расписание1 включает день 25/05/2015 с часами 1 и 2, но расписание 2 не включало их, поэтому я хотел бы исключить эти наблюдения из расписания 1.

Я пытался использовать команду groups_timetable1 = findgroups(timetable1.Date,timetable1.Hour);, но, к сожалению, эта команда не говорит вам, как отличить guish между наблюдениями.

Спасибо!

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Вы можете использовать метод 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 содержит переменные таблицы из обеих входных таблиц - это может или не может быть тем, что вы хотите.

1 голос
/ 17 апреля 2020

позвоните ismember, чтобы найти один набор данных в другом. чтобы найти несколько записей как группу в других составных записях, вы вызываете ismember(..., 'rows').

, например,

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

, если у вас есть строки с датой времени или datetime объектами, пожалуйста, преобразуйте их к числовым значениям, например, сначала позвонив datenum или posixtime.

...