为不平衡面板数据MATLAB创建矩阵

时间:2013-09-12 04:18:16

标签: sql matlab

我是MATLAB的新手。 我目前在matlab中有这个数据集

company     date                    EDF
A           01/01/1990              0.1
A           02/01/1991              0.25
A           02/01/1992              0.4
B           02/01/1991              1.1
B           03/01/1992              1.65
C           01/01/1990              0.78
C           02/01/1991              0.89
C           02/01/1992              0.90
C           01/02/1993              0.1

我想让它成为

Date             A         B           C
01/01/1990      0.1                   0.78
02/01/1991      0.25      1.1         0.89
02/01/1992      0.4       1.65        0.90
01/02/1993                            0.1

我认为我们可以用MATLAB做到这一点。你可以帮我用代码来做吗?谢谢!

1 个答案:

答案 0 :(得分:0)

首先,使用textscan()来阅读您的文件:

f = fopen('yourFileName.txt', 'r');
data = textscan(f, '%d %d %f', 'HeaderLines', 1, 'MultipleDelimsAsOne', 1, 'ReturnOnError', 0);
fclose(f);

然后,得到年份

years = unique(data{2});

现在,生成EDF值

edf = zeros(length(years), length(unique(data{1})))
for i = 1 : length(data{1})
    edf(find(years == data{2}(i)), data{1}(i)) = data{3}(i);
end

现在,将它们写入文件

f = fopen('newFile.txt', 'w');
fwrite(f, 'Date  Company1  Company2  Company3\n');
for i = 1 : length(years)
    fprintf(f, '%4d', years(i)); 
    fprintf(f, ' %9.2f', edf(i, :));
    fprintf(f, '\n');
end
fclose(f)

现在,如果你真的想要空条目而不是零,你需要在fprintf循环中添加一个if子句。