用matlab做日期筛选


应用场景

  • 从excel当中导入日期格式的数据进入matlab,并以cell格式存储,现在的格式:2021/6/7(例)。

  • 同时每个日期有对应的径流数据,以矩阵形式存储。

  • 现在想要筛选一些日期及其对应的径流数据


提示:以下是本篇文章正文内容,下面几种情况可供参考

一、筛选某个确切日期之前/后的所有数据

运用datanum函数

1.datanum的含义

datanum(DATE)返回的是公元1月0日以来经过的天数,可以写作:

n=datenum('2021/6/7')

n =

      738314

2.如何使用datanum做筛选

DATE为日期格式储存在cell的文件名,做出相减的指令,筛选出比1923/1/1日大的所有数据:

a = find(datenum(DATE(:,1))-datenum('1923/1/1')>0);

同理,筛选比1923/1/1日小的所有数据用<

得到的a为符合条件的行序号

再利用a的结果代回矩阵格式的径流数据中进行筛选,见三。

二、筛选条件较复杂的日期数据

1.分割cell的字符串

代码如下(示例):

m=arrayfun(@(k) DATE{k}(6:7),1:34,'un',0)

筛选的是DATE中第1到34行,第6-7位字符串结果,如2021/3/4,筛选出来的是3/

此步骤可将年、月、日数据分别提取出来

此时,提取出来的数据需要转置一下
代码如下(示例):
n=m'

2.选择需要的日期

2.1选择所有年份6月-9月的数据

先提取我要的月份,从cell类型n先转换为char类型k,再转换为double类型k2;提取比5大的月份(6789月,10、11、12月我只提取了第一位数字1,因此是小于5的,这里不考虑)

代码如下(示例):

k=cell2mat(n)
k2=str2num(k)
a=find(k2(:,1)-5>0)

得到的a为符合条件的行序号

再利用a的结果代回矩阵格式的径流数据中进行筛选,见三。

三.匹配日期对应的数据

代码如下(示例):

b是创建的新矩阵
NEW是创建序号和对应径流的新矩阵

b=(1:1:34334)
NEW=[b,Runoff]
index=find(ismember(NEW(:,1),a));
r = NEW(index,:)

r是提取出来的和a中序号一致的序号及对应径流数据

接下里我需要计算每年6、7、8、9月径流的平均值

c=r(:,2)%6789月径流单独提取出来
B=[];
for i=1:94%计算94年,循环94B(i)=mean(c([122*i-121:122*i]))%求均值
end

总结

以上是提取含有年月日数据及其对应的径流数据时,需要筛选6、7、8、9月径流数据并对其求平均值的基本操作。

  • 3
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值