0

それぞれ 1 列と 30000 行の 2 つの異なる double 変数があります。例えば:

A=[53
76
41
74
34
237
43…]

B= [1985
1985
1985
…
1986
1986
…
2013…]

私が行った場合:

size(unique(A),1)
ans =261
size(unique(B),1)
ans = 27

しかし、私がするとき:

D1=dummyvar(A)

355 列と 30000 行の 1 と 0 の double 行列を取得します。これは、Matlab が 261 ではなく 355 の異なるダミーを識別したことを意味します。

と、

D2=dummyvar(B)

同様に、2012 列の double も取得しますが、これも正しくありません。

Matlab は予想どおり、カテゴリ列でより多くのダミーを識別しているため、何か間違ったことをしているに違いありませんが、以前はこの式が機能していたため、何が原因かわかりません。誰か助けてくれませんか?ありがとうございました。

4

2 に答える 2

2

この機能が重宝しそうです

function [result, columnNames] = dummyvarSmart(x)
    [columnNames, ~, indices] = unique(x);
    result = dummyvar(indices);
    columnNames = transpose(columnNames);
end

こんな感じで使えます

>> B = sort(1983 + randi(30, 1000, 1));
>> min(B)
ans =
        1984
>> max(B)
ans =
        2013
>> [result, names] = dummyvarSmart(B);
>> size(result)
ans =
        1000        30
>> names(1:5)
ans =
        1984        1985        1986        1987        1988
于 2014-08-21T15:37:10.663 に答える