Excel Matlab中用空格替换NaN的可写性
给定一个包含许多Excel Matlab中用空格替换NaN的可写性,excel,matlab,matlab-table,Excel,Matlab,Matlab Table,给定一个包含许多NaN的Matlab表格,如何将该表格编写为excel或csv文件,其中NaN被空格替换 我使用以下功能: T = table(NaN(5,2),'VariableNames',{'A','C'}) writetable(T, filename) 我不想将其替换为零。我希望输出文件: 为NaN和 变量名包含在输出中 你只需要这样。它将NaNs本身替换为空格。首先使用或结合使用和将表转换为单元格数组。使用表的VariableNames属性检索变量名,并用单元格数组填充它们 da
NaN
的Matlab表格,如何将该表格编写为excel或csv文件,其中NaN被空格替换
我使用以下功能:
T = table(NaN(5,2),'VariableNames',{'A','C'})
writetable(T, filename)
我不想将其替换为零。我希望输出文件:
NaN
s本身替换为空格。首先使用或结合使用和将表转换为单元格数组。使用表的VariableNames
属性检索变量名,并用单元格数组填充它们
data= [T.Properties.VariableNames; table2cell(T)];
%or data= [T.Properties.VariableNames; num2cell(table2array(T))];
xlswrite('output',data);
以下项目的运行示例:
T = table([1;2;3],[NaN; 410; 6],[31; NaN; 27],'VariableNames',{'One' 'Two' 'Three'})
T =
3×3 table
One Two Three
___ ___ _____
1 NaN 31
2 410 NaN
3 6 27
收益率:
虽然我认为上述解决方案更简单,但如果您真的想使用:
老实说,我认为以您描述的格式输出数据最直接的方法是使用as。但是,如果您真的想使用,我能想到的唯一选项是将表中的每个值封装在a中,并用空单元格替换
nan
条目。从带有随机数据和nan值的样本表开始:
T = table(rand(5,1), [nan; rand(3,1); nan], 'VariableNames', {'A', 'C'});
T =
A C
_________________ _________________
0.337719409821377 NaN
0.900053846417662 0.389738836961253
0.369246781120215 0.241691285913833
0.111202755293787 0.403912145588115
0.780252068321138 NaN
以下是进行转换的一般方法:
for name = T.Properties.VariableNames % Loop over variable names
temp = num2cell(T.(name{1})); % Convert numeric array to cell array
temp(cellfun(@isnan, temp)) = {[]}; % Set cells with NaN to empty
T.(name{1}) = temp; % Place back into table
end
下面是表T
的最终结果:
T =
A C
___________________ ___________________
[0.337719409821377] []
[0.900053846417662] [0.389738836961253]
[0.369246781120215] [0.241691285913833]
[0.111202755293787] [0.403912145588115]
[0.780252068321138] []
现在,您可以使用writetable
将其输出到一个文件中:
writetable(T, 'sample.csv');
如果excel中有NAN,文件会变大吗?奇怪,可能是这里的样子。看起来你可以把它转换成矩阵,或者做一个循环。实际上,我也曾想过类似的方法,直到我意识到
xlswrite
本身就是这样做的。你介意我在回答中包括这一点吗?虽然我避免了使用loop和cellfun
,但我不确定它是否会更好/faster@SardarUsama:如果您有解决方案的另一个变体,我会继续添加它。我不介意。:)
writetable(T, 'sample.csv');