查找日期范围行和提取

时间:2013-09-24 15:23:26

标签: matlab date cell-array

这应该是直截了当的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年8月,然后将来使用所有包含" 09"对于9月和2013年。我不确定使用datenum或查找功能是否更好,然后如何对这两种情况进行编码。
我正在使用xlsread来阅读.csv文件,其中包含上面显示的部分数据。

2 个答案:

答案 0 :(得分:1)

我现在不知道你如何导入你的数据,以及你工作区中的变量是什么,但这是一种方法:

在Matlab的xxx.csv窗口中找到Current Folder - 文件。双击它以导入它。在显示的窗口中,您可以选择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 :(得分: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