我有两列数据文件('date'和'user'):
date1 user1
date1 user1
date1 user2
date2 user1
date2 user2
...
我需要找到每个唯一用户在特定日期执行操作的次数。我知道我可以使用unique()函数来查找整个不同的用户,然后运行for循环遍历所有行,检查是否相等然后总结,但问题是我有超过8mln行并运行double循环它会太贵了。
是否有其他方法可以计算每个用户的日期出现次数?
答案 0 :(得分: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 =
'user1@date1'
'user2@date1'
'user1@date2'
'user2@date2'
n =
2
1
1
1
注意grp2idx
需要MATLAB Statistics Toolbox答案 1 :(得分: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是否会为您执行此操作)。