2017-05-10 6 views
0

Ok, aus Python kommen und nie zuvor MATLAB benutzt zu haben, scheint es, wie es unnötig schwer ist, Daten in eine CSV zu schreiben MATLAB mit ...MATLAB Schreiben csv mit gemischten alphanumerischen Zeichenfolge, Skalar-Arrays, Nans

So Meine Daten sieht so aus:

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

Es hat N Header-Spalten, die aus alphanumerischen Zeichenfolgen bestehen. Es hat eine ganz linke Spalte der Länge M, die aus alphanumerischen Zeichenfolgen besteht. Es hat ein (M-1) x (N-1) Array von NUMERIC Daten, mit möglichen NaNs.

Können Sie bitte Code zur Verfügung stellen, um dies zu einem csv zu schreiben? Ich kann die Funktion xlsrite nicht verwenden, da ich in einem Cluster bin, in dem Excel nicht installiert ist. Wirklich nur mit der eigentlichen Datenanalyse weitermachen wollen. Danke

Antwort

0

Sie können Matrizen (nicht Zellenarrays) nur direkt schreiben mit , und wie Sie sagen, Sie brauchen Excel für xlswrite installiert, so dass Sie mit Low-Level-Operationen. Sie können zum Schreiben ein exemplarisches Vorgehen siehe Dateien für Ihr Beispiel here und Code in Text unter:

% 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); 

Ergebnis:

csv

0

Verwendung writetable. Es macht das Schreiben in CSV (oder in eine Excel-Datei oder in andere textbegrenzte Dateiformate) viel einfacher als die Verwendung von oder xlswrite oder Low-Level-Befehle wie 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') 

Wenn Ihre Daten derzeit nicht als eine Tabelle gespeichert (vielleicht ist es in einem Array oder ein Zellenfeld), dann ist es ziemlich einfach zu einem Tabellenfunktion Dienstprogramm zu konvertieren wie array2table oder cell2table. Sie zahlen nur eine kleine Zeitstrafe dafür.

PS - Sie müssen Excel nicht installieren, um in eine Excel-Datei zu schreiben. Sie können sie möglicherweise danach nicht mehr lesen, aber MATLAB kann sie trotzdem schreiben. Aber es klingt, als würdest du .csv sowieso bevorzugen.

Verwandte Themen