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

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

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

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

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

Спасибо!

2 ответа

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

Вызов 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 первый.

Другие вопросы по тегам