replace missing values in a matrix
1 次查看(过去 30 天)
显示 更早的评论
Consider the following:
A = [1,1,1;
2,3,1;
nan,3,1;
nan,3,nan];
how would I replace the missing values with the previous values? For example:
data =
1 1 1
2 3 1
2 3 1
2 3 1
I can find the nan by isnan(data) but I don't know how to replace the values as described.
Amended:
I've managed to do this but not in a very concise way:
A = [1,1,1;2,3,1;nan,3,1;nan,3,nan];
B = ~isnan(A);
I = arrayfun(@(x)find(B(:,x),1,'last'),1:size(A,2));
for i = 1:size(A,2);
C = A(:,i);
D = isnan(C);
C(D) = C(I(i));
Final(:,i) = C;
end
Could anyone suggest on a way to tidy this up?
1 个评论
Jan
2012-11-20
Is this matrix a possible input:
A = [1, NaN; ... % NaNs in first row
NaN, 2; ... % Non-NaNs after a NaN
3, NaN]
采纳的回答
Jan
2012-11-20
编辑:Jan
2012-11-20
What about a simple loop:
- Go through the rows from 2 to end
- Use isnan() to find the indices of NaNs
- Replace values in the current row by the ones of the former row.
I'm not more specific, because this could be a homework also.
[EDITED]
for k = 2:size(A, 1)
index = isnan(A(k, :));
A(k, index) = A(k - 1, index);
end
2 个评论
Image Analyst
2012-11-20
But you didn't say whether you solved it or not. If you did, mark this as "Answered" otherwise show your code and where you're having difficulty.
更多回答(1 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!