for文を使用して、​現在のフォルダ内にあ​る3つのcsvファイ​ルを1つのリスト型と​して格納するにはどう​すれば良いですか?

4 次查看(过去 30 天)
Kohei Yoshino
Kohei Yoshino 2024-3-27
% 現在のフォルダ内にある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しか格納されないのはなぜでしょうか?

采纳的回答

Kojiro Saito
Kojiro Saito 2024-3-27
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 个评论
Kojiro Saito
Kojiro Saito 2024-3-29
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) がセル配列
% として格納されます
Kohei Yoshino
Kohei Yoshino 2024-3-29
返信が遅くなりすみません。おかげさまで解決しました。ありがとうございます。今後用語の理解も深めてまいります。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 ビッグ データの処理 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!