How to place NaN instead of " " / [ ] or empty field by using standardizeMissing?

4 views (last 30 days)
Hi, everyone
I have tried standardizeMissing by using Readtable at that link (I just want to replace the number of 99999.00 with NaN but not with an Empty Field) , But when i want to use it manually from Table converted from Readmatrix by using this code :
[namafile,direktori]=uigetfile({'*.txt', 'Text-files (*.txt)';'*.sec', 'Seconds-Files (*.sec)';'*.min', 'Minutes-Files (*.min)'},'Load Data Magnet LEMI Non IAGA Non RAW (Menitan / Detikan)', 'Multiselect','on');
full = fullfile(direktori,namafile);
namafiles = cellstr(sort(namafile)); %Mensortir Kombinasi Data Yang Dipilih secara acak (PENTING)
nfiles = size(full,2);
f = cellstr(full);
file = length(f);
opts = delimitedTextImportOptions('Delimiter',' ',...
'VariableNames', {'VarName1','VarName2','VarName3','VarName4','VarName5','VarName6','VarName7','VarName8','VarName9','VarName10','VarName11','VarName12','VarName13'},...
'WhiteSpace', '');
opts.MissingRule = 'fill';
Bs = readmatrix(full, opts);
Bfix = cell2table(Bs);
tabs = table(Bfix.Bs1, Bfix.Bs2, Bfix.Bs3, Bfix.Bs4, Bfix.Bs5, Bfix.Bs6, Bfix.Bs7,...
Bfix.Bs8, Bfix.Bs9, Bfix.Bs10, Bfix.Bs11, Bfix.Bs12, Bfix.Bs13);
tabss = varfun(@cell2mat,tabs);
B = standardizeMissing(tabss,{'99999.00', 'N/A'});
data = B(:,{'cell2mat_Var1','cell2mat_Var2','cell2mat_Var3','cell2mat_Var4','cell2mat_Var5','cell2mat_Var6','cell2mat_Var7','cell2mat_Var8',...
tahun = str2num(data.cell2mat_Var1);
bulan = str2num(data.cell2mat_Var2);
tanggal = str2num(data.cell2mat_Var3);
jam = str2num(data.cell2mat_Var4);
menit = str2num(data.cell2mat_Var5);
detik = str2num(data.cell2mat_Var6);
x = str2num(data.cell2mat_Var7);
y = str2num(data.cell2mat_Var8);
z = str2num(data.cell2mat_Var9);
DOF = str2num(data.cell2mat_Var13);
Dlemi = datetime(tahun,bulan,tanggal,0,0,0,'TimeZone','Asia/Jakarta', 'Format', 'yyyy-MM-dd');
D1 = datetime(tahun,bulan,tanggal,0,0,0,'TimeZone','Asia/Jakarta');
DOHSlemi = sqrt((x.^2)+(y.^2));
DOFSlemi = sqrt((x.^2)+(y.^2)+(z.^2));
The result of variable B (StandardizeMissing) is :
cell2mat_Var1 cell2mat_Var2 cell2mat_Var3 cell2mat_Var4 cell2mat_Var5 cell2mat_Var6 cell2mat_Var7 cell2mat_Var8 cell2mat_Var9 cell2mat_Var10 cell2mat_Var11 cell2mat_Var12 cell2mat_Var13
_____________ _____________ _____________ _____________ _____________ _____________ _____________ _____________ _____________ ______________ ______________ ______________ ______________
2019 07 14 00 00 59 2027.10 -14498.37 35956.37 0.056406 -0.383280 38769.36
2019 07 14 00 01 59 35898.87 2027.14 -14498.32 35956.06 0.056408 -0.383282 38769.05
2019 07 14 00 02 59 35898.79 2027.35 -14498.38 35955.99 0.056414 -0.383284 38769.02
Look at the cell2mat_Var7 row 1, its should be placed with NaN instead of " " or an empty field like that.....
The total amount of rows from each variable at the tables is should be 1440, but because using StandardizeMissing, the cell2mat_Var7 only contain with 1439 (missing 1 field). And because of that, the code become error at DOHSlemi :
Matrix dimensions must agree.
Error in lemi2comp (line 56)
DOHSlemi = sqrt((x.^2)+(y.^2));
So, how to use standardizeMissing function correctly to create NaN data instead of " " or an empty field by using a Table input?
B = standardizeMissing(A,indicator)
B = standardizeMissing(A,indicator,'DataVariables',datavars)
Thank you Community, i hope you can understand what the purpose of my question....
Thank you so much and please help me in finding the solution (i had already attached my data).... /.\ /.\ /.\

Accepted Answer

Steven Lord
Steven Lord on 19 Sep 2021
My guess is that the data that was read into that 7th variable in your table was not numeric data but included data that MATLAB interpreted as text data. In that case the appropriate missing value for that variable is empty text, not NaN.
Can you show the output of this command?
Steven Lord
Steven Lord on 24 Sep 2021
Do you want that data to be stored as text (in which case blank text is the correct missing value) or as numbers (in which case NaN is the standard missing value)? If the latter you will need to convert the text into numbers using something like str2double. Alternately modify your importing code to specify that you want that variable in the table to be imported as double not char.
Tyann Hardyn
Tyann Hardyn on 25 Sep 2021
Yes, Sir, i want the data to be in a form of NaN as the output, so the data input should be a Number? Alright, Sir, so i must to create a condition that the imported data is in a number (double).

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!