0

我对 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 做到这一点。你能帮我写代码吗?谢谢!

4

1 回答 1

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 子句。

于 2013-09-12T06:21:28.177 回答