0

我有一个 22 列的单元格数组。我想通读单元格数组并根据第 2 列(字符串格式的站点)将其分成不同的 .mat 文件。基本上,这些数据包含纽约各地网站一年的信息。我想分别保存每个站点的数据(找到具有相同第 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

所以现在它是一个单元阵列。如何将具有相同第二列的所有数据保存到不同的文件中?使用“unique”或“find”有用吗?我知道如何通过搜索特定字符串并保存所有具有该字符串的内容来做到这一点,但是由于有很多网站,有没有办法自动执行此操作?

会使用 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 回答