2013-09-24 1 views
0

Это должно быть прямолинейно в MATLAB. Я просто не знаю, как и застрял. У меня есть данные, которые выглядят, как это ниже, в форме: mm/dd/yyyy hh:mm windspeed - это почасовые данные, охватывающие лет с 1991 по настоящее время (2013 г.) клеточных массивов и числовой массив:Найти строки диапазона дат и выдержки

8/22/1993 23:00 2.381453514 
8/23/1993 0:00 3.39369154 
8/23/1993 1:00 5.398661613 
8/23/1993 2:00 7.231492996 
8/23/1993 3:00 9.187699318 
8/23/1993 4:00 9.802619934 
8/23/1993 5:00 8.85418129 
8/23/1993 6:00 9.889941216 
8/23/1993 7:00 10.4628706 
8/23/1993 8:00 10.8967123 
8/23/1993 9:00 10.12729263 
8/23/1993 10:00 9.106620789 
8/23/1993 11:00 7.600066185 
8/23/1993 12:00 6.597990036 
8/23/1993 13:00 6.764455795 
8/23/1993 14:00 7.360760689 
8/23/1993 15:00 5.828835011 

Я пытаюсь извлечь только третий столбец (windspeed). Мне нужно изменить диапазон дат, чтобы извлекать месяц за раз, например, ВСЕ строки, содержащие месяц «08» за август 1993 года, а затем для будущего использования все строки, содержащие «09» за сентябрь, и год 2013. Я не уверен, что лучше использовать datenum или функцию поиска, а затем как закодировать это для любого случая.
Я использую xlsread, чтобы прочитать файл .csv с частью данных, показанной выше.

+0

Я забыл упомянуть, что я использую xlsread для чтения файла .csv с частью данных, показанной выше. Спасибо, – user2100039

+1

Что вы имеете в своей рабочей области после использования 'xlsread'? Можете ли вы привести пример? –

ответ

1

Я не знаю, как вы импортировать данные сейчас, и что ваши переменные в рабочем пространстве, но вот способ сделать это:

Найти xxx.csv -файл в Current Folder окне в Matlab. Дважды щелкните его, чтобы импортировать его. В появившемся окне вы можете выбрать Delimiter: Space. Поиграйте с настройками, чтобы найти «наилучший»

enter image description here

Теперь у вас есть переменный в рабочем пространстве Matlab.

hhv = datevec(hh); 

% You are interested in column 4, HOUR: 
% hhv is a matrix with [2013, 1, 1, HOUR, 0, 0] 

Теперь, если вы хотите, чтобы все между 0:00 с ветрами и 06:00 08/23/1993:

winds = ws(dt == datenum(1993,8,23) & hhv(:,4) >= 0 & hhv(:,4) < 6) 

winds = 

    3.3937 
    5.3987 
    7.2315 
    9.1877 
    9.8026 
    8.8542 
1

общий способ читать весь файл может быть:

fid = open('data.csv'); 
% %d = integer, %f = float 
data = textscan(fid, '%d/%d/%d %d:%d %f'); 
fclose(fid); 

% all months in data 
disp(data{1}); 

% all wind speeds in data 
disp(data{end}); 

Вы можете ограничить возвращаемые данные, изменив шаблон соответствия в TextScan:

% only August 
mask = data{1} == 8; 
speeds = data{end}(mask); 

% June of 1997 
mask = (data{1} == 6) & (data{3} == 1997); 
speeds = data{end}(mask); 

Подробнее см. Здесь: http://www.mathworks.com/help/matlab/ref/textscan.html#btg0kes

+0

Это очень хороший способ сделать это, но я не могу заставить его работать ... 'data' содержит только пустые ячейки. –

Смежные вопросы