2012-02-10 2 views
2

У меня есть файл данных двух столбцов («дата» и «пользователь»):Найти вхождения различных значений в массиве ячеек в Matlab

date1 user1 
date1 user1 
date1 user2 
date2 user1 
date2 user2 
... 

Мне нужно найти, сколько раз каждый уникальный пользователь сделал действие при определенном дате. Я знаю, что могу использовать функцию unique(), чтобы найти всех отдельных пользователей и после запуска цикла for через все строки проверить, равно ли и суммировать, но проблема в том, что у меня более 8 миллионов строк и для запуска двойной Это было бы слишком дорого.

Есть ли другой способ подсчета вхождения даты для каждого пользователя?

+0

Этот вопрос не легко понимаете - что вы подразумеваете под «действием»? в коде отсутствует ссылка на действие. Является ли запись в массиве «действием»? – siliconwafer

ответ

2

Всегда указывайте, с какими типами данных вы имеете дело, лучше с example.

Я предполагаю, что оба пользователя и даты являются строками, объединенными в массив ячеек.

tbl = { 'date1' 'user1' 
     'date1' 'user1' 
     'date1' 'user2' 
     'date2' 'user1' 
     'date2' 'user2' }; 

Объединить 2 колонки в одну:

user_date = strcat(tbl(:,2),'@',tbl(:,1)); 

Тогда вы можете рассчитывать вхождений:

[gi,g] = grp2idx(user_date); 
n = histc(gi,1:numel(g)); 

g = 

'[email protected]' 
'[email protected]' 
'[email protected]' 
'[email protected]' 

n = 

    2 
    1 
    1 
    1 

Примечание MATLAB Statistics Toolbox требуется для grp2idx

+0

Спасибо! Это работает отлично! ;) – Mallvina

0

Если я правильно понял вопрос правильно, проверьте следующий код:

% Your data 
A = [1 9; 8 5; 5 9; 8 5; 9 9]; 
date = 8; 
user = 5; 

% Find how many times each unique user did the action at the certain date 
nb_occurences = size(A, 1) - size((setdiff(A, [date user], 'rows')), 1); 

размер кэша (A, 1) необходимо (не уверен, если MATLAB будет делать это для вас).

Смежные вопросы