我有一个矩阵 A
,其中包含第一列 user_id
、第二列 year
、第三列 month
,第四列天
A=[0 2010 10 19;
0 2010 10 19;
0 2010 10 18;
0 2010 10 18;
0 2010 10 17;
0 2010 10 17;
0 2010 9 20;
0 2010 9 19;
0 2010 9 19;
0 2010 9 19]
我想根据月份和日期划分这些数据。我怎样才能在 MATLAB 中做到这一点?
最佳答案
您可以使用 unique
按月和日(第 3 列和第 4 列)对每行进行分组,然后使用 splitapply
对共享月/日的每组行执行操作。我们要执行的操作只是将它们放入元胞数组中:@(x){x}
。下面的代码可以完成这个任务。
% Assign each unique month/day combination an ID
[~, ~, inds] = unique(A(:,[3 4]), 'rows');
% Divide up the rows based upon this ID
groups = splitapply(@(x){x}, A, inds);
以及celldisp(groups)
的结果
groups{1} =
0 2010 9 19
0 2010 9 19
0 2010 9 19
groups{2} =
0 2010 9 20
groups{3} =
0 2010 10 17
0 2010 10 17
groups{4} =
0 2010 10 18
0 2010 10 18
groups{5} =
0 2010 10 19
0 2010 10 19
话虽这么说,您可以在不实际将数据拆分为不同部分的情况下进行分析。由于 MATLAB 针对矩阵运算进行了优化,这可能会提高性能。
有关 splitapply
和数据分组的更多信息 here
关于matlab - 根据多列对矩阵的行进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37793010/