0

行列の別の列で等しい値のグループに従って、ベクトルを2D行列に転置する必要があります。例えば:

1 x1
1 x2
1 x3
1 x4
2 x5
2 x6
2 x7
2 x8

次のようになります。

x1 x2 x3 x4;
x5 x6 x7 x8;

これは、proctabulateを使用してSASで行う手順と同じです。Reshapeは転置しないのでうまくいきませんでしたし、運が悪かったので順列を試しました。find、transpose、およびvertcatを使用してプログラムする必要がある以外に、これを行う組み込みコマンドはありますか?

4

1 に答える 1

0

何らかの理由で回避したい場合はreshape、コメントの解決策は機能しますがsub2ind、最初の列が常に新しい行サブを提供することを前提として、新しい行列Vの線形インデックスを取得するために使用できます。

X = [[1,1,1,1,2,2,2,2]' (1:8)'];
subs = X(:,1);

M = length(unique(subs)); % count unique ids
N = length(X)./M; % Problem assumption: M sets of size N (MxN=length(X))

V = zeros(M, N);
i = sub2ind([M, N], subs, repmat(1:N,1,M)');
V(i) = X(:,2);

上記は、仕様によれば、に同数の一意の要素がある限り機能するため、マトリックスXを形成できます。MxN

于 2012-09-24T00:56:34.053 に答える