Записать заменить NaN с пробелами в Matlab

Учитывая таблицу Matlab, которая содержит много NaNКак я могу написать эту таблицу в виде файлов Excel или CSV, где NaN заменяются пробелами?

Я использую следующую функцию:

T = table(NaN(5,2),'VariableNames',{'A','C'})

writetable(T, filename)

Я не хочу заменять его нулями. Я хочу, чтобы выходной файл:

  1. имеет заготовки для NaN и
  2. что имена переменных включены в вывод.

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');

Другие вопросы по тегам