replace NaN with zeros for several variables in a dataset
2 ビュー (過去 30 日間)
古いコメントを表示
I have a large dataset with many variables containing NaN. I want to change all the NAN to 0 at once but I've not been able to do so. For instance, for A < 1000000 x 50 dataset> I've tried the following: >> x=find(isnan(A)); which does not work b/c 'isnan' is not defined for datasets
The following works but I have to do it variable by variable >> x=find(isnan(A.VarName)); >> A.VarName(x)=0; I also try to use a loop but have not succeeded.
Any suggestion on how to changes NAN for all dataset at once or for a set of numeric variables at once. Thanks Vasquez
0 件のコメント
採用された回答
Azzi Abdelmalek
2014 年 7 月 26 日
編集済み: Azzi Abdelmalek
2014 年 7 月 26 日
If A is your dataset
B=double(A);
B(isnan(B))=0;
replacedata(A,B)
Or
B=dataset2cell(A)
B(cellfun(@isnan,B))={0}
replacedata(A,B(2:end,:))
その他の回答 (2 件)
Star Strider
2014 年 7 月 25 日
2 件のコメント
Star Strider
2014 年 7 月 26 日
My pleasure!
You can also use dataset2cell and then cellfun. Changing the NaN values to zero can produce problems in statistical analyses, since zero can be considered valid data while NaN cannot, although I am certain you have considered this.
Ahmet Cecen
2014 年 7 月 25 日
It is surprising that the isnan function is not working, I have been able to use it in similar situation without any problems. How about starting with a zeros matrix B (1000000x50) and pulling isfinite(A) into it, or ischar, or an applicable is function for your dataset. Quite memory intensive and a lazy way to do it. If you elaborate on what exactly your dataset contains, we might be able to suggest better alternatives.
B=zeros(1000000x50); B(isfinite(A))=A(isfinite(A));
参考
カテゴリ
Help Center および File Exchange で Data Type Identification についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!