1

少し前に私はこの質問をしました:列の値に応じた文字マトリックスの自動分割を新しいデータフレームの可変数に

その質問に対して、関数splitは完璧な答えでした。今、私はMatlabで同じことをしようとしていますが、同じことをする関数を見つけることができません.

だから、私の質問は簡単splitです.MatlabのR関数と同じことをする関数はありますか? そうでない場合、Matlabのリンクされた質問で尋ねられたことを正確に行うにはどうすればよいですか?

4

2 に答える 2

1

unique関数andはstrcmpcell 配列で機能します。のようなものはどうですか

x = {'Hi', 'Med', 'Hi', 'Low'; 'A', 'D', 'A', 'C'; '8', '3', '9', '9'; '1', '1', '1', '2'}';

for ii = unique(x(:, 3))'
    x(find(strcmp(x(:, 3), ii)), :)
end

ばかげているように思えるかもしれませんが、for ループのインデックス配列は行でなければならないためunique(x(:, 3))'、転置演算子は重要です。正しく行われた場合iiはスカラーです。そうしないと、エラーが発生します

strcmp を使用したエラー入力は同じサイズである必要があります。または、いずれかがスカラーである可能性があります

于 2013-09-19T16:13:49.963 に答える
1

必要なのは新しいテーブル クラス R2013b だと思います。

>> x = {'Hi', 'Med', 'Hi', 'Low'; 'A', 'D', 'A', 'C'; '8', '3', '9', '9'; '1', '1', '1', '2'}';
>> t = cell2table(x)

t = 

     x1      x2     x3     x4 
    _____    ___    ___    ___

    'Hi'     'A'    '8'    '1'
    'Med'    'D'    '3'    '1'
    'Hi'     'A'    '9'    '1'
    'Low'    'C'    '9'    '2'

>> slice = t(strcmp(t.x2,'A'),:)

slice = 

     x1     x2     x3     x4 
    ____    ___    ___    ___

    'Hi'    'A'    '8'    '1'
    'Hi'    'A'    '9'    '1'

>> 

詳細については、こちらのテーブル クラスをご覧ください。

テーブルのすべての一意の値に対してこれを行いたい場合は、cellfun を活用できます。

>> slices = cellfun(@(value) t(strcmp(t.x2,value),:), unique(t.x2),'UniformOutput',false)

slices = 

    [2x4 table]
    [1x4 table]
    [1x4 table]

>> slices{:}

ans = 

     x1     x2     x3     x4 
    ____    ___    ___    ___

    'Hi'    'A'    '8'    '1'
    'Hi'    'A'    '9'    '1'


ans = 

     x1      x2     x3     x4 
    _____    ___    ___    ___

    'Low'    'C'    '9'    '2'


ans = 

     x1      x2     x3     x4 
    _____    ___    ___    ___

    'Med'    'D'    '3'    '1'

>> 

この場合、t.x2 のすべての一意の要素をこの関数に渡します。cellfun がテーブルを連結しようとせず、テーブルの各スライスを独自のセルに配置するように、均一な出力は false でなければなりません。

于 2013-09-19T22:04:34.397 に答える