我是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做到这一点。你可以帮我用代码来做吗?谢谢!
答案 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子句。