在矩阵中查找字符串的位置

时间:2018-07-03 10:42:58

标签: string matlab location contains

我想在矩阵中找到“ N”的位置。之后,我想用矩阵中该向量的中位数替换“ N”。我已经为此使用了这些代码,但是遇到了一些错误。

%% put test data in matrix


k=1;
m=1;
n=3;
for j=1:99
    percentage2 = j/99
    mDataTest(m,1) = str2double(data{1}{j});
    mDataTest(m,2) = 0;

    for i = 3:50
        percentage1 = j/50       
        if(strcmp(data{i}{j},''))
            mDataTest(m,i) = 'N'; %give each "" the median value

        elseif(strcmp(data{i}{j},'NULL'))
            mDataTest(m,i) = 'N'; %give each "NULL" the median value

        else
            mDataTest(m,i) = str2double(data{i}{j}); %make matrix with data               
        end
    end
        m=m+1;
        n=3;
end

Index = find(contains(mDataTest,'N'));

for i = 1 :50
    vMedian=median(vDataTest(:,i));
end

mDataTest(Index)= vMedian(Index(2));

在这里,我使用了“包含”功能,但出现错误。 有没有人可以帮助我?

谢谢!

1 个答案:

答案 0 :(得分:0)

您的代码对我来说有点奇怪。让我尝试了解您想要做什么。

因此,您首先使用带有文本的2D单元变量,然后将其转换为数字矩阵。当单元格为空或包含'NULL'时,您希望它们具有它们所在行的中间值。

我将从转换开始,将空和“ NULL”单元格设置为NaN。 (不是数字)然后找到all nans,并在median和omitnan标志中使用以替换nans。

for j=1:99
    for i = 1:50
        if(strcmp(data{i}{j},'')||strcmp(data{i}{j},'NULL'))
            mDataTest(j,i) = nan; %replace with nan
        else
            mDataTest(j,i) = str2double(data{i}{j}); %convert to number
        end
    end
end

for j=1:99
    for i = 1:50
        if isnan(mDataTest(j,i))
            mDataTest(j,i) = median(mDataTest(j,:),'omitnan')
        end
    end
end