少し前に私はこの質問をしました:列の値に応じた文字マトリックスの自動分割を新しいデータフレームの可変数に
その質問に対して、関数split
は完璧な答えでした。今、私はMatlabで同じことをしようとしていますが、同じことをする関数を見つけることができません.
だから、私の質問は簡単split
です.MatlabのR関数と同じことをする関数はありますか? そうでない場合、Matlabのリンクされた質問で尋ねられたことを正確に行うにはどうすればよいですか?
少し前に私はこの質問をしました:列の値に応じた文字マトリックスの自動分割を新しいデータフレームの可変数に
その質問に対して、関数split
は完璧な答えでした。今、私はMatlabで同じことをしようとしていますが、同じことをする関数を見つけることができません.
だから、私の質問は簡単split
です.MatlabのR関数と同じことをする関数はありますか? そうでない場合、Matlabのリンクされた質問で尋ねられたことを正確に行うにはどうすればよいですか?
unique
関数andはstrcmp
cell 配列で機能します。のようなものはどうですか
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 を使用したエラー入力は同じサイズである必要があります。または、いずれかがスカラーである可能性があります
必要なのは新しいテーブル クラス 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 でなければなりません。