150万行の行列の一​行目にラベルを追加し​、csvファイルで保​存する方法に関して

조회 수: 31 (최근 30일)
NS
NS 2020년 1월 21일
편집: Musashi Ito 2020년 1월 22일
150万行の行列データの一行目にラベルを追加し、csvファイルで保存したいと考えています。
保存された際に'NaN'は空にしたいです。
保存データのイメージ(SaveDataの一行目にlabelを追加し保存する)
label = {'label1', 'label2'};
data1 = (0:1:1500000).';
data2 = (0:1:1500000).';
data1(1) = NaN;
data1(2) = NaN;
data2(4) = NaN;
SaveData = horzcat(data1,data2); 
保存された際のcsvファイルの中身のイメージ
label1, label2
,0
,0
2,2
3,
4,4
5,5
.
.
.
1499999,1499999
1500000,1500000
普段はxlswriteを使用するのですが、xlswriteは150万行のデータの書き込みはできないため。
お力添えをお願いします。

채택된 답변

Musashi Ito
Musashi Ito 2020년 1월 22일
편집: Musashi Ito 2020년 1월 22일
150 万行のデータの書き込みは writetable 関数を使用してできそうです。よってデータ型を table 型に変換する必要があります。table 型に変換すれば各行の名前も追加できます。
しかしながら、writetable 関数には NaN を空に変換するオプションがなさそうですので、どうしても空にしたい場合はプログラムを工夫する必要がありそうです。
例えば、以下のようなプログラムでしたら書き出せそうです。(時間がかかりますが・・・)
% 150万行2列のデータの作成
label = {'label1' 'label2'};
data1 = (0:1500000)';
data2 = (0:1500000)';
data1(1) = NaN;
data1(2) = NaN;
data2(4) = NaN;
SaveData = [data1 data2];
% table 型のデータ T に変換
T = array2table(SaveData);
T.Properties.VariableNames = label; % 各行ラベルを代入
% table データ内の数値データを cell 配列に変換
T.label1 = num2cell(T.label1);
T.label2 = num2cell(T.label2);
% セル配列内の NaN のところを特定して 空配列[] に置き換え
T.label1(cellfun(@isnan, T.label1)) = {[]};
T.label2(cellfun(@isnan, T.label2)) = {[]};
% table 型のデータ T を csv 形式で書き出し
% 書き出しに時間がかかります
writetable(T,'mydata.csv','Delimiter',',','QuoteStrings',true)
他にもっと良い方法があるかもしれないです。

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 データ型の変換에 대해 자세히 알아보기

제품


릴리스

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!