MATLAB Сохраните файл .mat в файлы меньшего размера на основе одного общего столбца.

У меня есть массив ячеек с 22 столбцами. Я хочу прочитать массив ячеек и разделить его на разные файлы .mat на основе столбца 2 (сайт в строковом формате). По сути, данные содержат информацию за один год для сайтов по всему Нью-Йорку. Я хочу сохранить данные для каждого сайта отдельно (найти строки с одинаковым столбцом 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

Итак, теперь это массив ячеек. Как я могу сохранить все данные с одним и тем же вторым столбцом в другой файл? Было бы полезно использовать «уникальный» или «найти»? Я знаю, как это сделать, выполнив поиск определенной строки и сохранив все, у кого есть эта строка, но, поскольку сайтов много, есть ли способ автоматизировать это?

Будет ли работать уникальное использование для создания списка имен файлов, а затем циклическое создание файла с использованием этого списка? Я все еще относительно новичок в программировании, поэтому я не знаю, что я могу сделать.


person SugaKookie    schedule 04.10.2013    source источник
comment
Второй столбец - это все то же значение для данных, которые вы разместили. Вы имеете в виду значение типа 36-061-0079 или какой-то другой столбец?   -  person chappjc    schedule 04.10.2013
comment
Ой, извини. Я не тот файл вставил. Пожалуйста, попробуйте еще раз. Я имел в виду вторую колонку. Новый файл должен иметь другие значения.   -  person SugaKookie    schedule 05.10.2013


Ответы (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

это должно сделать это?

person Cici    schedule 04.10.2013