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

% 現在のフォルダ内にある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일

1 개 추천

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

Kohei Yoshino
Kohei Yoshino 2024년 3월 28일
Kojiro Saitoさん
早急のご回答ありがとうございます。ご提示いただいたコードを実行させていただきましたが、自分の説明不足もあり違う出力結果となってしまいました。
3つのcsvファイルはいずれもVariableNamesが同一で、連結させるというよりはそれぞれのcsvファイルを独立した状態で読み込みたいです。
data = readtable(MyPath(n));
data(1); data(2); data(3); %data(1)には一つ目のcsvファイルが、data(2)には2つ目のファイルが呼び出せるようにしたい
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개)

카테고리

도움말 센터File Exchange에서 Data Import from MATLAB에 대해 자세히 알아보기

제품

릴리스

R2023b

태그

질문:

2024년 3월 27일

댓글:

2024년 3월 29일

Community Treasure Hunt

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

Start Hunting!