2012-02-10 42 views
2

我有两列(“日期”和“用户”)的数据文件:查找单元阵列不同的值出现在Matlab

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

我需要找到多少次,每次独特用户在某些日期处采取了行动。我知道我可以使用unique()函数来查找整个不同的用户,然后在所有行中运行for循环,检查是否相等,然后总结,但问题是我有超过8mln的行并且要运行double循环它会太昂贵。

是否有任何其他方式来计算每个用户的日期发生?

+0

这个问题是不容易明白 - “行动”是什么意思?代码中没有提及任何操作。数组中的条目是否为“动作”? – siliconwafer 2012-02-10 14:47:31

回答

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统计工具箱需要grp2idx

+0

谢谢!这很好用! ;) – Mallvina 2012-02-12 20:26:41

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为你做的)。