How to place NaN instead of " " / [ ] or empty field by using standardizeMissing?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Tyann Hardyn
el 19 de Sept. de 2021
Comentada: Tyann Hardyn
el 25 de Sept. de 2021
Hi, everyone
Actually i already ask about this topic at : https://www.mathworks.com/matlabcentral/answers/1455464-re-write-a-data-from-file-readtable-readmatrix-etc-with-a-replacing-rule-for-a-specific-data-num?s_tid=srchtitle
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');
cd(direktori);
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',...
'cell2mat_Var9','cell2mat_Var10','cell2mat_Var11','cell2mat_Var12','cell2mat_Var13'});
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?
This is the syntax of standardizeMissing at https://in.mathworks.com/help/matlab/ref/standardizemissing.html#bty9pdr-1-indicator :
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).... /.\ /.\ /.\
0 comentarios
Respuesta aceptada
Steven Lord
el 19 de Sept. de 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?
class(B.cell2mat_Var7)
3 comentarios
Steven Lord
el 24 de Sept. de 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.
Más respuestas (0)
Ver también
Categorías
Más información sobre Spreadsheets en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!