Найти вхождения различных значений в массиве ячеек в Matlab - PullRequest
2 голосов
/ 10 февраля 2012

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

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

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

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 = 

'user1@date1'
'user2@date1'
'user1@date2'
'user2@date2'

n =

     2
     1
     1
     1

Примечание. MATLAB Statistics Toolbox необходим для grp2idx

0 голосов
/ 10 февраля 2012

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

% 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 сделает это за вас).

...