2013-09-24 145 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)。我需要能夠更改日期範圍以便一次提取一個月,例如所有包含1993年8月份的月份「08」的行,然後爲將來使用所有包含9月份的「09」行和2013年。我不確定是否最好使用datenum或查找功能,然後如何對這兩種情況進行編碼。
我正在使用xlsread來閱讀.csv文件,其中包含上面顯示的部分數據。

+0

我忘記提及我正在使用xlsread讀取上面顯示的部分數據的.csv文件。謝謝, – user2100039

+1

使用'xlsread'之後你的工作區中有什麼?你能給個例子嗎? –

回答

1

我不知道你是怎麼導入現在你的數據,你的工作區中的變量是什麼,但這裏有一個辦法做到這一點:

查找在Matlab中Current Folder窗口xxx.csv -file。雙擊它來導入它。在出現的窗口中,您可以選擇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 1993年8月23日之間的所有windspeeds:

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

它看起來像這樣做的一個非常好的方式,但我不能得到它的工作......'數據'只包含空單元格。 –