0

22 列のセル配列があります。cell 配列を読み取り、列 2 (文字列形式のサイト) に基づいて異なる .mat ファイルに分割したいと考えています。基本的に、データにはニューヨーク中のサイトの 1 年間の情報が含まれています。各サイトのデータを個別に保存したい (同じ列 2 の行を見つけて保存する)。

また、.mat ファイルを netcdf ファイルに変換して、MATLAB を使用していない人でも読めるようにしたいのですが、まず、特定の文字列を手動で見つけて保存することなく、セル配列を分離できるようにする必要があります。それ。

データはこのファイルです: https://www.dropbox.com/sh/li3hh1nvt11vok5/4YGfwStQlo

このスクリプトを使用してファイルを読み取り、日付 (列 1) で並べ替えます。

filename = ('PM2.5_NY_2012.csv'); % PM2.5 88101 data from NY in the year 2012

% Use functions created by read_mixed_csv.m to read in
data = read_mixed_csv(filename,','); % Creates cell array of data
data = regexprep(data, '^"|"$',''); % Gets rid of double quotes at the start and end of the string 

% Sort data based on date (Column 1)
[Y,I] = sort(data(:,1)); % Create 1st column sorted
site_sorted = data(I,:); % Sort the entire array

これでセル配列になりました。同じ 2 列目のすべてのデータを別のファイルに保存するにはどうすればよいですか? 「ユニーク」または「検索」を使用すると便利ですか? 特定の文字列を検索してその文字列を含むすべてを保存する方法は知っていますが、サイトがたくさんあるので、これを自動化する方法はありますか?

unique を使用してファイル名のリストを作成し、ループしてそのリストを使用してファイルを作成しますか? プログラミング初心者なので何ができるかわかりません。

4

1 に答える 1

1
    filename = ('PM2.5_NY_2012.csv'); % PM2.5 88101 data from NY in the year 2012

% Use functions created by read_mixed_csv.m to read in
data = read_mixed_csv(filename,','); % Creates cell array of data
data = regexprep(data, '^"|"$',''); % Gets rid of double quotes at the start and end of the string 

% Sort data based on date (Column 1)
[Y,I] = sort(data(:,1)); % Create 1st column sorted
site_sorted = data(I,:); % Sort the entire array

u_id=unique(site_sorted(:,2)); % get unique id

for i=1:length(u_id)
    idx=ismember(site_sorted(:,2),u_id{i}); % extract index where the second column matches the current id value
    site_data = site_sorted(idx,:);
    save([u_id{i} '.mat'],'site_data');
end

これでいいの?

于 2013-10-04T20:42:49.927 に答える