MATLAB 将 .mat 文件保存为基于一列共有的较小文件
Posted
技术标签:
【中文标题】MATLAB 将 .mat 文件保存为基于一列共有的较小文件【英文标题】:MATLAB Save a .mat file into smaller files based on one column being in common 【发布时间】:2013-10-04 15:22:32 【问题描述】:我有一个 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 来制作文件名列表,然后使用该列表循环创建文件?我对编程还是比较陌生,所以我不知道我能做什么。
【问题讨论】:
第二列与您发布的数据的值相同。您的意思是像36-061-0079
或其他列的值?
糟糕,抱歉。我没有放正确的文件。请再试一次。我的意思是第二列。新文件应该有不同的值。
【参考方案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_idi); % extract index where the second column matches the current id value
site_data = site_sorted(idx,:);
save([u_idi '.mat'],'site_data');
end
应该这样做吗?
【讨论】:
以上是关于MATLAB 将 .mat 文件保存为基于一列共有的较小文件的主要内容,如果未能解决你的问题,请参考以下文章