この質問は、最初の列の値が同じ場合、行列またはcsvを変換して2番目の列の値を同じ行に配置するためのMatLab(または他の言語)の派生物ですか? 最初の列のインデックスで異なる行の値をグループ化する
もしも
A = [2 3 234 ; 2 44 99999; 2 99999 99999; 3 123 99; 3 1232 45; 5 99999 57]
1st column | 2nd column | 3rd column
--------------------------------------
2 3 234
2 44 99999
2 99999 99999
3 123 99
3 1232 45
5 99999 57
作りたい
1st col | 2nd col | 3rd col | 4th col | 5th col | 6th col| 7th col
--------------------------------------------------------------------
2 3 234 44
3 123 99 1232 45
5 57
つまり、Aの1列目の各数字に対して、「99999」以外の数字を入れたい
「99999 を除く」部分を無視すると、最初の列のインデックスによって異なる行のグループ値としてコーディングできます。
[U, ix, iu] = unique(A(:,1));
vals = reshape(A(:, 2:end).', [], 1); %'// Columnize values
subs = reshape(iu(:, ones(size(A, 2) - 1, 1)).', [], 1); %'// Replicate indices
r = accumarray(subs, vals, [], @(x){x'});
しかし明らかに、このコードは 99999 を無視しません。
2つの方法があると思います
1. first make r, and then remove 99999
2. remove 99999 first, and then make r
いずれにせよ、私はより速いものが欲しいだけです。
前もって感謝します!