将Excel中的日期转换为多个字段中的matlab

问题描述:

我在matlab中有许多字段(gilt_name)的结构(后备)。该结构是从Excel导入的工作簿,每个字段对应于该工作簿中的工作表。每个工作表是时间序列的日期和相应的后备母猪价格。按照When to Convert Dates from Excel Files的说明,我将excel中的日期转换为字符串,然后导入matlab。但是我如何在matlab中同时将这种转换应用到很多领域?我有数百个与每个gilt_name对应的数据数组,这将为我节省很多时间。 非常感谢。将Excel中的日期转换为多个字段中的matlab

+0

如果你给的变量是如何存储的一个具体的例子将是有益的(矩阵/单元阵列,...)。向我们展示您用于导入数据的代码和结果 – Amro 2012-08-11 14:18:43

比方说,我们必须包含三个表的Excel电子表格,每个包含了一系列的日期和一些相应的值:

excel

考虑下面的代码将数据导入到MATLAB:

%# for each of the three sheets 
data = cell(3,1); 
for i=1:3 
    %# read the sheet as unprocessed data (both text and numeric) 
    [~,~,raw] = xlsread('data.xlsx', i); 

    %# parse strings as serial dates and combine into a matrix 
    data{i} = [datenum(raw(:,1),'dd/mm/yyyy') cell2mat(raw(:,2))]; 
end 

现在单元阵列data中的每个单元具有第i个单元的数据。日期表示为连续日期编号。例如,我们可以绘制第一个时间序列为:

plot(data{1}(:,1), data{1}(:,2)) 
datetick('x', 'dd', 'keepticks') 
xlabel('days'), ylabel('prices') 

screenshot

+0

忘了说,你总是可以使用DATESTR函数返回字符串表示:'datestr(data {1}(:,1))' – Amro 2012-08-11 14:49:36

嘿,你可以让你的字段名

names = fieldnames(gilts) 

然后所有你需要做的就是将循环在一个for循环访问变量的名称由一个递增计数器的列表。

例如,

names = fieldnames(gilts); 
for i = 1 : length(gilts), 
    n = [gilts(i,1). 'names(i)' (:,:)]; 
    eval(n); % and do what you need to do 
end 

所以这样你可以指数“名称”为母猪等领域的字符串。

+0

的摘录,无需EVAL调用(实际上总是避免它); MATLAB结构支持[动态字段名称](http://www.mathworks.com/help/techdoc/matlab_prog/br1v5cc-1.html):'gilts(m)。(names {n})' – Amro 2012-08-11 14:45:40

+0

哦,这是非常对我有帮助,谢谢! – 2012-08-11 15:06:01