我在做一个项目的一部分时遇到了问题,我希望你能帮助我。
我在excel中有这三列;
01-01-2012 00:15 A 7,160000
01-01-2012 00:30 A 1,600000
01-01-2012 00:45 C 3,040000
01-01-2012 01:00 A 1,560000
01-01-2012 01:15 A 0,000000
01-01-2012 01:30 D 0,000000
01-01-2012 01:45 A 0,000000
t直到31-01-2012 23:45
现在我想把它们读入MATLAB并用这种格式转换成3个新矩阵;
时间戳
01-01-2012 00:00
01-01-2012 01:00
(...)
期间
A
A
价格
11,800000
10
所以基本上我想要一个程序读取时间戳并保持一天的月份和小时(忽略分钟),在那段时间内它需要在一小时内显示最重复的值(例如:它会给出A到00和C到01)最后我希望它总结那个小时的价格(所以它将在00:15和00:30的价格相加价格等)。
如果你能解决这个问题,那将是一个巨大的帮助。
PS在1小时内,我将始终有一个最重复的标记(3个A和1个C,3个D和1个A等)我可以在这个月找到4个标记,ABC D.这个标记不是循环但我会在整个月内找到它。答案 0 :(得分:1)
在我看来,您的主要问题是从Excel中读取数据并以您可以使用的格式获取数据。如果是这样的话:
结帐xlsread
。你有很多可能性。例如,您可以使用以下语法:
[num,txt,raw] = xlsread(___)
但如果您是MATLAB的新手,并且不需要最有效的方法,我建议您分别阅读每个列。 注意:这不是最好的方法,但在我看来这是最简单的方法。您可以在每个列上使用此命令(因此调用它三次):
num = xlsread(filename,sheet,xlRange)
查看this page,了解如何处理日期。总之,将日期转换为Excel中的数值。由于您有小时和分钟,这将是一个十进制数字,表示自1900年1月1日(或1904年1月2日,如果在MAC上)以来的天数。由于MATLAB从0000年1月1日开始计算,因此您需要在阅读文件后添加大约1900年(查看我给出的参考资料以了解如何)。
处理您不需要分钟的一种方法是转换为datevec,并将最后一列清零(这样您也会删除信息):
[Y, M, D, H, MN, S] = datevec(___) ;
% or
date_vector = datevec(___);
% Where you just don't use the MN and S variables
如果您希望日期看起来像日期,请将datevec转换为datestring。查看formatOut
,您可以选择所需的格式。
试试以上内容。我担心我不能为你做这项工作。
要获得最重复的值,请查看mode
。 mode(X)
返回X
的示例模式,这是X中最常出现的值。您还可以通过组合以下某些内容来复制此功能:sort
,unique
,diff
或all
。当然,您可以使用sum
对值进行求和。
如果这只是你坚持的最后一部分,我建议你稍微改一下这个问题。如果两者兼而有之,并且在完成上述操作之后你被困在最后一部分,我建议你把它作为一个单独的问题,因为这与从Excel中读取它无关。
祝你好运=)