/ Автоматично разделяне на клетъчния масив според стойностите на колоните в променлив брой нови масиви от клетки - matlab, split

Автоматично разделяне на клетъчния масив според стойностите на колоната в променлив брой нови масиви - матлаб, разделен

Преди време зададох този въпрос: Автоматично разделяне на матрицата на знаците според стойностите на колоната в променлив брой нови рамки от данни

За този въпрос функцията split беше идеалният отговор, сега се опитвам да направя същото в Matlab и не мога да намеря никаква функция, която прави същото.

И така, простият ми въпрос е: Има ли някаква функция, която върши същото като R split функция в Matlab? и ако не, как бих могъл да направя точно това, което беше зададено в свързания въпрос в Matlab?

Отговори:

1 за отговор № 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"

>>

За повече информация, разгледайте класа на таблицата тук

Ако искате да направите това за всички уникални стойности на таблицата, можете да използвате мобилната функция:

>> 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 в тази функция. Еднообразният изход трябва да е невярен, така че клетъчната функция да не се опитва да обединява таблиците заедно, а по-скоро поставя всеки парче от таблицата в собствената си клетка.


1 за отговор № 2

Най- unique и strcmp функции работи на клетъчни масиви. Какво става с нещо подобно

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 входовете трябва да са с еднакъв размер или всеки от тях може да бъде скалар