for文を使用して、現在のフォルダ内にある3つのcsvファイルを1つのリスト型として格納するにはどうすれば良いですか?
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Kohei Yoshino
le 27 Mar 2024
Commenté : Kohei Yoshino
le 29 Mar 2024
% 現在のフォルダ内にある3つのcsvを抽出
Pathlists = dir("*.csv");
% 抽出したcsv構造をセルに変換
Mylists = (struct2cell(Pathlists))';
% 全行と1列目、2列目を文字列として抽出
Mylists = string(Mylists(:,1:2));
% 完全なファイル仕様に変換
MyPath = fullfile(Mylists(:,2),Mylists(:,1));
% 空リストを作成し、以下のようなデータ型を作成したい
% data = [[file1], [file2], [file3]] 各データの値1801×11 table
data = []; % 空リスト
for n = 1:length(Pathlists)
data = readtable(MyPath(n));
end
>> data % file3のtableしか格納されないのはなぜでしょうか?
0 commentaires
Réponse acceptée
Kojiro Saito
le 27 Mar 2024
file3のtableしか格納されないのは、forループごとにdata変数が上書きされて最後のn=3の場合のものしか残らないためです。
1つのリスト型にしたいというのが、テーブルを縦に連結するという意味でしたら、forの中を
data = vertcat(data, readtable(MyPath(n)));
または
data = [data; readtable(MyPath(n))];
とすることで3つのテーブルが連結されます。
datastoreを使って、forループを使わないで実現する方法もあります。
% 現在のフォルダ内にある3つのcsvを抽出
ds = datastore("*.csv");
data = readall(ds);
3 commentaires
Kojiro Saito
le 29 Mar 2024
dataの要素に各CSVのテーブルデータを格納したいということですね。
dataをセル配列にして、各要素に入れてみてください。
data = cell(1, length(Pathlists)); % 事前割当
for n = 1:length(Pathlists)
data{n} = readtable(MyPath(n));
end
% data{1}、data{2}、data{3} がテーブルデータ
% data(1)、data(2)、data(3) がセル配列
% として格納されます
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur ビッグ データの処理 dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!