расщепление строки в Matlab - PullRequest
0 голосов
/ 11 марта 2012

Чтобы облегчить описание этого вопроса, я привел следующий пример кода, который похож на фактические данные, с которыми я работаю:

clear all
AirT = {rand(32,1),rand(32,1),rand(32,1),rand(32,1)};
SolRad = {rand(32,1),rand(32,1),rand(32,1),rand(32,1)};
Rain = {rand(32,1),rand(32,1),rand(32,1),rand(32,1)};
Location = {'England','Wales','Scotland','Ireland'};
points = {'old','old','old','new'};
CorrVariables = {'AirT','SolRad','Rain'};
for i = 1:length(Location);
    Data = @(location) struct('Location',location,CorrVariables{1},AirT{i},...
        CorrVariables{2},SolRad{i},CorrVariables{3},Rain{i});
    D(i) = Data(Location{i});
end
FieldName = {D.Location};
R = corrcoef([D.AirT],'rows','pairwise');
R_Value = [Location(nchoosek(1:size(R,1),2)) num2cell(nonzeros(tril(R,-1)))];
q = points(nchoosek(1:size(R,1),2));
    %to calculate the combination of these points we need to convert the
    %cell into a matrix.
Re = [R_Value q];

Из этого примера я хотел бы создать еще один массив ячеек в столбце 5 Re, который зависит от строк в столбцах 4 и 5. Таким образом, если столбцы 4 и 5 в Re равны, например, old 'old тогда в столбце 6 должно отображаться «старое». Однако, если клетки отличаются, например, «старый» «новый», тогда я бы хотел, чтобы новый массив ячеек (то есть столбец 6 в Re) указывал «старый / новый».

Как это возможно?

1 Ответ

2 голосов
/ 11 марта 2012

Из вашего описания я думаю, что самый ясный подход - использовать комбинацию конкатенации строк и регулярных выражений .

Сначала объедините столбцы 4 и 5 в новыйстолбец:

newColumn = strcat(Re(:,4), '/', Re(:,5));

Теперь найдите повторный шаблон и замените его на первый соответствующий токен:

newColumn = regexprep(newColumn, '(\w+)/\1', '$1');

Объедините в существующую матрицу ячеек:

Re = [Re, newColumn];
...