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