2016-05-25 4 views
0

У меня есть столбец данных, который включает в себя строковые и целочисленные значения, а также пустые ячейки (см. Ниже). То, что я хотел бы сделать, - подсчитать количество вхождений уникальных строковых и целочисленных значений, но только для тех значений, которым предшествует другое/пустое значение. Возможно ли это в Matlab? Большое спасибо.Учет уникальных последовательных значений в Matlab

Пример:

Red, Red, Red, [blank], 2, 2, 1, 1, 1, [blank], 1, 1, [blank], Red, Red, 1 

Желаемый результат:

Red = 2, 
2 = 1, 
1 = 3 
+0

Не должно быть '1 = 2', так как случаи' 1's, которые следуют за '[пробел]' происходят дважды? – gariepy

+0

В этом случае я хотел бы подсчитать все экземпляры 1s, которым предшествует пустой или другой номер/строка (т.е. каждый раз, когда 1 не предшествует 1). Таким образом, итоговый счет здесь будет 3 экземпляра. –

ответ

1

сначала найти индексы значений, которые необходимо рассчитывать - то есть первый, и те, которые отличаются от предыдущего значения и не являются -blank. Затем вам нужно подсчитать уникальные значения в полученном подмножестве. Небольшое предостережение состоит в том, что вы не можете просто использовать unique, поскольку типы данных являются смешанными. Один из способов обойти это будет преобразование чисел в строки (что, очевидно, предполагает, что у вас нет строк, совпадающих с числами). Затем вы можете использовать комбинацию unique и accumarray найти уникальные значения и их частоты:

data = {'Red', 'Red', 'Red', [], 2, 2, 1, 1, 1, [], 1, 1, [], 'Red', 'Red', 1}; 

idx = [true, ~cellfun(@isequal, data(2:end), data(1:end-1)) & ~cellfun(@isempty, data(2:end))]; 
data_match = data(idx); 

data_str = cellfun(@num2str, data_match, 'uni', false); 
[~, ia, ic] = unique(data_str, 'stable'); 
values = data_match(ia)' 
counts = accumarray(ic, 1) 

values = 
    'Red' 
    [ 2] 
    [ 1] 


counts = 
    2 
    1 
    3 
Смежные вопросы