MATLAB用混合的字母数字字符串,标量数组,nans

时间:2017-05-10 02:52:06

标签: matlab csv export-to-csv

好的,来自Python并且之前从未使用过MATLAB,似乎使用MATLAB将数据写入csv是不必要的......

所以我的数据看起来像这样:

col1       A2A    B2   CC3     D5
asd189     123    33   71119   18291
as33d      1311   31   NaN     1011
asd189     NaN    44   79      191

它有N个标题列,由字母数字字符串组成。 它有一个长度为M的最左边的列,它由字母数字字符串组成。 它有一个(M-1)x(N-1)个NUMERIC数据数组,可能有NaN。

您能否提供代码将其写入csv?我不能使用xlswrite函数,因为我在没有安装Excel的集群上。真的只想继续进行实际的数据分析。感谢

2 个答案:

答案 0 :(得分:0)

您只能使用csvwrite直接编写矩阵(不是单元格数组),正如您所说的那样,您需要为xlswrite安装Excel,这样您才能进行低​​级操作。您可以看到用于写入文本文件here的演练,以及下面示例的代码:

% Initialise example cell array
M = {'col1',  'A2A', 'B2', 'CC3',  'D5'
     'asd189', 123,  33,    71119, 18291
     'as33d',  1311, 31,    NaN,   1011
     'asd189', NaN,  44,    79,    191};
% Open a file for writing to (doesn't have to already exist, can specify full directory)
fID = fopen('test.csv','w');
% Write header line, formatted as strings with comma delimiter. Note \r\n for new line
fprintf(fID, [repmat('%s, ', 1, size(M,2)-1),'%s\r\n'], M{1,:});
% Loop through other rows
for row = 2:size(M,1)
    % Write each line of cell array, with first column formatted as string 
    % and other columns formatted as floats
    fprintf(fID, ['%s, ', repmat('%f, ', 1, size(M,2)-2),'%f\r\n'], M{row,:});
end
% Close file after writing
fclose(fID);

结果:

csv

答案 1 :(得分:0)

使用writetable。它使写入CSV(或Excel文件或其他文本分隔文件格式)比使用csvwritexlswrite或低级命令(如fprintf)更容易

>> t = table({'asd189';'as33d';'asd189'},[123;1311;NaN],[33;31;44],[71119;NaN;79],[18291;1011;191]);
>> t.Properties.VariableNames = {'col1','A2A','B2','CC3','D5'}
t = 
      col1      A2A     B2     CC3      D5  
    ________    ____    __    _____    _____
    'asd189'     123    33    71119    18291
    'as33d'     1311    31      NaN     1011
    'asd189'     NaN    44       79      191
>> writetable(t,'myfile.csv')

如果您的数据当前未存储为表格(可能是数组或单元格数组),则使用array2table等实用程序功能很容易转换为表格或cell2table。这样做只会支付一小笔时间。

PS - 您不需要安装Excel即可写入Excel文件。之后您可能无法读取它们,但MATLAB仍然可以编写它们。但听起来你还是喜欢.csv。