2

異種データを含むデータセットがあります。合計や平均化などの追加操作を行わずに、いくつかの列でグループをカウントしたいと考えています。

それにもかかわらず、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'})
4

0 に答える 0