我最近问了一个与another one相关的问题。我将数据下载为csv.file
。然后我在MATLAB中格式化它。我obtan格式化数据,如:
我想格式化数据,以便获得:
换句话说,日期应该在第一列,而两个标识符应分别在前两行。
我尝试了@gnovice提供的代码,但我有问题要调整第二个标识符。代码是:
A = accumarray([rowIndex colIndex], data(:, 4), [], @(x) x(1));
A = [NaN colVals; rowVals A];
其中data
等于图片(1)。
因此,我获得了一个矩阵A
,如:
A =
NaN 1 2 3;
20160101 100 80 90;
20170101 150 90 200;
如何以第二个标识符处理的方式调整我的代码并A
变为:
A =
NaN 1 2 3;
NaN 10 10 15;
20160101 100 80 90;
20170101 150 90 200;
答案 0 :(得分:2)
您可以使用此代码
C = unique([identifier_1,identifier_2],'rows')
并相应地格式化数据
答案 1 :(得分:1)
answer from albusSimba指向正确的方向。您需要收集包含您的标识符的列(即data(:, [1 3])
),并使用'rows'
选项将其传递给unique
以查找唯一的行组合,然后捕获要使用的第三个输出作为accumarray
聚合的索引。然后,您的最终矩阵格式必须更改为第二个标识符的帐户:
[rowVals, ~, rowIndex] = unique(data(:, 2));
[colVals, ~, colIndex] = unique(data(:, [1 3]), 'rows');
A = accumarray([rowIndex colIndex], data(:, 4), [], @(x) x(1));
A = [NaN colVals(:, 1).'; NaN colVals(:, 2).'; rowVals A];
您的样本数据的结果:
A =
NaN 1 2 3
NaN 10 10 15
20160101 100 80 200
20170101 150 90 200