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

30 ビュー (過去 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 Center および File Exchangeデータ型の変換 についてさらに検索

製品


リリース

R2018b

Community Treasure Hunt

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

Start Hunting!