異種データを含むデータセットがあります。合計や平均化などの追加操作を行わずに、いくつかの列でグループをカウントしたいと考えています。
それにもかかわらず、grpstats
関数には数値データ フィールドが必要です。
>> grpstats(ds, {'Field1', 'Field2'}, {'numel'})
Error using dsgrpstats (line 256)
Data variables must numeric or logical.
Error in grpstats (line 135)
[varargout{1:nargout}] = dsgrpstats(x,group,whichstats,varargin{:});
克服する方法は?
アップデート
まだ SSCCE を作成できないのはおかしいです。
小さな例の作品:
>> A={'Name', 'Gender'; 'Ann', 'female'; 'John', 'male'; 'Peter', 'male'}
B=cell2dataset(A,'ReadVarNames',true,'ReadObsNames',true)
grpstats(B,{'Gender'},{'numel'})
A =
'Name' 'Gender'
'Ann' 'female'
'John' 'male'
'Peter' 'male'
B =
Gender
Ann 'female'
John 'male'
Peter 'male'
ans =
Gender GroupCount
female 'female' 1
male 'male' 2
これが私が欲しいものです。しかし、私の例では
Error using dsgrpstats (line 256)
Data variables must numeric or logical.
そして、次のトリックを行う必要があります
>> B.Dummy=ones(size(B,1),1)
B =
Gender Dummy
Ann 'female' 1
John 'male' 1
Peter 'male' 1
>> grpstats(B,{'Gender'},{'numel'},'DataVars',{'Dummy'})
ans =
Gender GroupCount numel_Dummy
female 'female' 1 1
male 'male' 2 2
更新 2 (CCSSE)
見つけた。データセットに入れ子になった cell 配列が含まれている場合、エラーが発生します。
A={'Name', 'Gender', 'Measurements'
'Chanel Iman Robinson', 'female', {32, 23, 33}
'Wilhelmina Cooper', 'female', {38, 24, 36}
'Arnold Schwarzenegger', 'male', {57, 33, 29}};
B=cell2dataset(A,'ReadVarNames',true,'ReadObsNames',true)
grpstats(B, {'Gender'}, {'numel'})