Записать заменить NaN с пробелами в Matlab
Учитывая таблицу Matlab, которая содержит много NaN
Как я могу написать эту таблицу в виде файлов Excel или CSV, где NaN заменяются пробелами?
Я использую следующую функцию:
T = table(NaN(5,2),'VariableNames',{'A','C'})
writetable(T, filename)
Я не хочу заменять его нулями. Я хочу, чтобы выходной файл:
- имеет заготовки для NaN и
- что имена переменных включены в вывод.
2 ответа
Вам просто нужно xlswrite
для этого. Заменяет NaN
с пробелами сам. использование table2cell
или сочетание table2array
а также num2cell
сначала преобразовать вашу таблицу в массив ячеек Использовать 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
выходы:
Хотя вышеприведенное решение проще на мой взгляд, но если вы действительно хотите использовать writetable
затем:
tmp = table2cell(T); %Converting the table to a cell array
tmp(isnan(T.Variables)) = {[]}; %Replacing the NaN entries with []
T = array2table(tmp,'VariableNames',T.Properties.VariableNames); %Converting back to table
writetable(T,'output.csv'); %Writing to a csv file
Честно говоря, я думаю, что самый простой способ вывода данных в формате, который вы описываете, это использовать xlswrite
как Сардар сделал в своем ответе. Однако, если вы действительно хотите использовать writetable
единственная опция, о которой я могу подумать, - это инкапсулировать каждое значение в таблице в массиве ячеек и заменить nan
записи с пустыми ячейками. Начиная с этой таблицы образцов T
со случайными данными и 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');