我有两个不同的双变量,一个列,每个列30000行。例如:
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行1s和0的双矩阵,这意味着Matlab已经识别了355个不同的假人,而不是261个。
和,
D2=dummyvar(B)
我也得到了,双倍与2012年的专栏,什么也是不正确的。
Matlab正在我的分类列中像预期的那样识别更多的假人,所以我肯定做错了什么,但是我不知道为什么,因为以前这个公式对我有用。有人能帮帮我吗?谢谢。
发布于 2014-08-21 15:03:43
dummyvar(A)
的列数为max(A)
。这个例子应该澄清:
>> A = [1;2;2;5]
A =
1
2
2
5
>> unique(A)
ans =
1
2
5
>> dummyvar(A)
ans =
1 0 0 0 0
0 1 0 0 0
0 1 0 0 0
0 0 0 0 1
如果要避免那些全零列,请使用unique
的第三个输出“消除A
中的空白”,然后应用dummyvar
。
>> A = [1;2;2;5]
A =
1
2
2
5
>> [~, ~, uA] = unique(A)
uA =
1
2
2
3
>> dummyvar(uA)
ans =
1 0 0
0 1 0
0 1 0
0 0 1
发布于 2014-08-21 15:37:10
也许这个函数是有用的
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
https://stackoverflow.com/questions/25429538
复制相似问题