如果我有以下数据集
A =
20061201 100
20061201 10
20061201 9
20061202 15
20061202 50
20061204 40
20061204 16
20061204 12
column 1
包含日期columns 2
有相应的观察结果
其中.
对应于没有观察。
我希望输出类似于
row 1: 20061201 100 10 9
row 2: 20061202 15 50 .
row 3: 20061204 40 16 12
我该怎么做,有什么提示吗?
答案 0 :(得分:0)
使用unique
和accumarray
[uVals,~,subs] = unique(A(:,1));
out = [num2cell(uVals), accumarray(subs,A(:,2),[],@(x) {x.'})]
您的样本输入:
>> A
A =
20061201 100
20061201 10
20061201 9
20061202 15
20061202 50
20061204 40
20061204 16
20061204 12
<强>结果:强>
>> out
out =
[20061201] [1x3 double]
[20061202] [1x2 double]
[20061204] [1x3 double]
我已使用cell-Array
作为输出..在这种情况下,您不必将.
填充到缺陷行。如果您想要显示特定的单元格,可以使用{}
代替()
这样的内容。
>> out{1,2}
ans =
100 10 9
>> out{2,2}
ans =
15 50
如果您坚持获取矩阵而不是单元格数组,则可以使用以下方法(基于this答案)。我还建议您使用NaN
(非数字)填充而不是.
[uVals,~,subs] = unique(A(:,1));
valC = accumarray(subs,A(:,2),[],@(x) {x.'});
maxSize = max(cellfun(@numel,valC));
valMat = cellfun(@(x) [x nan(1,maxSize-numel(x))],valC,'uni',0);
valMat = vertcat(valMat{:});
out = [uVals, valMat];
示例输入的结果:
>> out
out =
20061201 100 10 9
20061202 15 50 NaN
20061204 40 16 12