我想在矩阵中找到“ 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));
在这里,我使用了“包含”功能,但出现错误。 有没有人可以帮助我?
谢谢!
答案 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