如果我有以下数据集
A =
20061201 100
20061201 10
20061201 9
20061202 15
20061202 50
20061204 40
20061204 16
20061204 12column 1有日期,而columns 2有相应的观测值,其中.对应于没有观测值。
我希望输出结果是这样的
row 1: 20061201 100 10 9
row 2: 20061202 15 50 .
row 3: 20061204 40 16 12 我该怎么做呢,有什么建议吗?
发布于 2015-05-22 09:35:16
使用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我还建议您使用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 12https://stackoverflow.com/questions/30382266
复制相似问题