每月最大数据

7次观看(最近30天)
我正在尝试编写一个函数,以找到整个数据集的所有每月最大值。我是编程和MATLAB的新手。这是一个类似于我正在做的循环的示例
为了i = 1:100
年(i)=最大(d(i))
结尾
我尝试使用此代码,并在数据集中每年复制并粘贴它,因为我不知道如何使用时间表或double'作为'循环,但是我收到了一条错误消息,告诉我左右侧面有不同数量的元素。我该如何重写以给我寻找的功能?
1条评论
DPB
DPB 2021年1月22日
不要在墙上击败头,转换为时间表,然后使用 退休
这样一来,大约是两到三行代码 - 文档中有明确的示例 - 请尝试一下,然后张贴您的努力以及被卡住的地方。

登录发表评论。

接受的答案

凯利·科尔尼(Kelly Kearney)
虽然你可以这样做 寻找 ,使用Max的第二个输出更快。
%一些与您类似的假数据
t = dateTime(2018,1,1:500)';
rsq = [rand(500,1)天(t)月(t)年(t)];
%找到最大...
imax =零(12,1);
为了IM = 1:12
tmp = rsq(:,1);%数据的临时副本
tmp(rsq(:,3)〜= im)= -Inf;%不匹配的%本月设置低
[〜,imax(im)] = max(tmp);%返回最大值索引
结尾
maxVal = rsq(imax,:)

更多答案(1)

DPB
DPB 2021年1月24日
t = dateTime(2018,1,1:500)';
rsq = [rand(500,1)天(t)月(t)年(t)];
或者对于上述相同的数据结构:
maxVals = splitApply(@max,rsq(:,1),findgroups(rsq(:,3)));
该解决方案和上面的解决方案将是给定月阵列中所有数据的全球最大值 - 如果有多年的数据,并且不希望所有年份作为复合材料分析,则必须年度和每月的小组:
[g,idy,idm] = Findgroups(rsq(:4),rsq(:,3));
maxVals = splitApply(@max,rsq(:,1),g)];
对于此处给定的一组值,这导致:
[IDM iDy maxvals]
ans =
1.00 2018.00 0.98
2.00 2018.00 0.97
3.00 2018.00 0.99
4.00 2018.00 0.99
5.00 2018.00 1.00
6.00 2018.00 0.92
7.00 2018.00 0.99
8.00 2018.00 0.91
9.00 2018.00 0.97
10.00 2018.00 0.96
11.00 2018.00 0.95
12.00 2018.00 0.99
1.00 2019.00 0.93
2.00 2019.00 0.96
3.00 2019.00 1.00
4.00 2019.00 0.99
5.00 2019.00 0.96
>>
以表格形式,分组ID变量来自 Findgroups 。我用了 格式银行 为了避免自动缩放默认格式,但这确实将两个小数点添加到整数值...
桌子并不是很难 - 从上面的数组开始,
trsq = array2table(rsq,'variablenames',{'数据',,,,'天',,,,'月',,,,'年'});
tmaxvals = rowfun(@max,trsq,“ inputvariobles”,,,,'数据',,,,...
“分组”,{'年',,,,'月'} ,,,,,,...
“输出variablenames”,{'groupmax'});
为了实现与上述随机数据相同的实现:
>>格式短而格式袖珍的
>>头(TRSQ)
ans =
8×4桌
数据
___________________
0.30596 1 1 2018
0.91988 2 1 2018
0.80037 3 1 2018
0.66754 4 1 2018
0.25832 5 1 2018
0.95717 6 1 2018
0.40822 7 1 2018
0.51435 8 1 2018
>> tmaxvals =
17×4桌
集团股票GroupMax
___________________________
2018 1 31 0.98046
2018 2 28 0.96657
2018 3 31 0.99294
2018 4 30 0.99388
2018 5 31 0.99522
2018 6 30 0.92159
2018 7 31 0.98775
2018 8 31 0.91045
2018 9 30 0.9694
2018 10 31 0.95942
2018 11 30 0.9504
2018 12 31 0.98866
2019 1 31 0.92582
2019 2 28 0.95508
2019 3 31 0.99525
2019 4 30 0.99393
2019 5 15 0.95888
>>

标签

社区寻宝

在Matlab Central中找到宝藏,发现社区如何为您提供帮助!

开始狩猎!