2013-04-08 3 views
0

У меня есть файл .mat, который содержит данные за 2006-2100 годы. Каждый год существует различное количество строк. Мне нужно подсчитать, сколько строк - 2006, сколько - 2007 и т. Д.MATLAB - Количество записей за каждый год

Установки по столбцу: Год, Месяц, День, Лат, Длинные Я просто хочу подсчитать количество строк, содержащих в том же году и получить массив обратно с массивом, содержащим эту информацию.

Я думаю, что цикл for или while должен работать, но я не знаю, как это сделать.

ответ

2

Если мы предположим, ваши данные в числовой матрице, вы можете просто сделать:

num_lines2006 = sum(data(:,1)==2006); 
data2006 = data(data(:,1)==2006),:); 

Если вы хотите добавить столбец с количеством строк на соответствующий год, здесь решение с петля:

for k=size(data,1):-1:1 
    num_year(k,1) = sum(data(:,1)==data(k,1)); 
end 
data = [data num_year]; 

Вот решение без цикла:

[unq_year,~,idx] = unique(data(:,1),'stable'); 
num_year = grpstats(data(:,1),unq_year,@numel); 
data = [data num_year(idx)]; 
+0

'grpstats' требует набор инструментов статистики, хотя , – erikced

+0

Да, это правда. – yuk

1

Поскольку вы просто хотите, чтобы подсчитать количество строк, вы могли бы просто написать что-то простое, как:

years = unique(data(:, 1)); 
counts = arrayfun(@(year) nnz(data(:, 1) == year), years); 

years содержит уникальные лет, и numRows количество раз они найдены.

Вы также можете использовать один вкладыш, вдохновленный ответ Джонаса:

[counts, years] = hist(data(:,1), unique(data(:,1))'); 
1

Рассчитывать числовые записи, вы можете использовать histc

years = unique(data(:,1); 
counts = histc(data(:,1),years); 
Смежные вопросы