Matlab фильтрует записи по дате - PullRequest
0 голосов
/ 03 мая 2020

Я маленькая ладья ie в Matlab, и у меня возникли проблемы с домашней работой

У меня есть Excel, который выглядит так:

Date          column A         column B
1/1/2015     (double)         (double)
5/1/2015     (double)         (double)
6/1/2015     (double)         (double)
12/2/2015     (double)         (double)
13/2/2015     (double)         (double)
15/3/2015     (double)         (double)
11/4/2015     (double)         (double)
12/4/2015     (double)         (double)
13/4/2015     (double)         (double)
11/5/2015     (double)         (double)
13/5/2015     (double)         (double)
11/6/2015     (double)         (double)
11/7/2015     (double)         (double)
11/8/2015     (double)         (double)
11/9/2015     (double)         (double)
11/10/2015     (double)         (double)
11/11/2015     (double)         (double)
11/12/2015     (double)         (double)
.
########(string?) ...          ...
########(string?) ...          ...
15/8/2018         ...          ...
.
.
.

Я импортировал и преобразовал его в таблицу, и теперь мне нужно отфильтровать ее и оставить только первый день каждого квартала.

, поскольку Matlab так сильно отличается от таких вещей, как MySQL, java, вещей, которые я изучил раньше, и я получил не так много времени, я в такой отчаянной ситуации (1014 *) панирую (это просто начало моей домашней работы!), поэтому мне очень нужна помощь.

Я не знаком с синтаксисом, и это Первый раз я задал вопрос, извините, если я задам что-то глупое.

Ответы [ 2 ]

0 голосов
/ 04 мая 2020
table = readtable("a.csv");
table= table(month(table.Date)==4 | month(table.Date)==7 | month(table.Date)==10 | month(table.Date)==1, :);

только что нашел способ, который может фильтровать специфику c месяц

теперь мне просто нужно сохранить только первый день месяца и удалить все остальные дни

0 голосов
/ 03 мая 2020

Вы можете использовать класс datetime в Matlab для сравнения дат.

Предполагая:
1. Ваши даты в формате dd/MM/yyyy
2. Даты в столбец 1 уже отсортирован при печати из Excel
3. Разделителем для файла csv с именем data.csv является пробел,
следующий фрагмент должен выводить столбцы с первой датой каждого квартала.

clc; clear;

fid = fopen('data.csv');

% Retrieve data from file
data = textscan(fid, '%s %s %s', 'delimiter', ' ');

% Convert string to date objects 
% that enables date comparison
datesArray = datetime(data{1}, 'InputFormat', 'dd/MM/yyyy');

% Define start and end dates of each quarter
QstartDayMonth = ['01/01'; '01/04'; '01/07'; '01/10'];
QendDayMonth   = ['31/03'; '30/06'; '30/09'; '31/12'];

% Parse data to extract seasonal firsts
quart = 1;
for i = 1:length(datesArray)
  % Obtain year
  currentDate = datesArray(i);
  currentYear = num2str(currentDate.Year);

  % Define start date of current year's quarter
  quarterStart = strcat(QstartDayMonth(quart, :), '/', currentYear);
  quarterEnd   = strcat(QendDayMonth(quart, :)  , '/', currentYear);
  quarterStart = datetime(quarterStart, 'InputFormat', 'dd/MM/yyyy');
  quarterEnd   = datetime(quarterEnd, 'InputFormat', 'dd/MM/yyyy');

  % Check if current date lies in chosen quarter
  if (currentDate >= quarterStart)
    disp([data{1}{i}, '  ', data{2}{i}, '  ', data{3}{i}]);

    % If it does, advance the quarter to be checked
    quart = quart + 1;
    if (quart > 4)
      quart = 1;
    end
    continue;
  end
end
fclose(fid);
...