Этот пример показывает, как найти, убрать, и удалить строки таблицы с недостающими данными.
Загрузите демонстрационные данные от разделенного от запятой текстового файла, messy.csv. Файл содержит много различных недостающих индикаторов данных:
Пустой символьный вектор ('')
период (.)
Нет данных
NaN
-99
Чтобы задать векторы символов, чтобы обработать как пустые значения, используйте аргумент в виде пар "имя-значение" 'TreatAsEmpty' с функцией readtable.
T = readtable('messy.csv','TreatAsEmpty',{'.','NA'})
T=21×5 table
A B C D E
______ ____ _____ ____ ____
'afe1' 3 'yes' 3 3
'egh3' NaN 'no' 7 7
'wth4' 3 'yes' 3 3
'atn2' 23 'no' 23 23
'arg1' 5 'yes' 5 5
'jre3' 34.6 'yes' 34.6 34.6
'wen9' 234 'yes' 234 234
'ple2' 2 'no' 2 2
'dbo8' 5 'no' 5 5
'oii4' 5 'yes' 5 5
'wnk3' 245 'yes' 245 245
'abk6' 563 '' 563 563
'pnj5' 463 'no' 463 463
'wnn3' 6 'no' 6 6
'oks9' 23 'yes' 23 23
'wba3' NaN 'yes' NaN 14
⋮
T является таблицей с 21 строкой и пятью переменными. 'TreatAsEmpty' только применяется к числовым столбцам в файле и не может обработать числовые литералы, такие как '-99'.
Просмотрите тип данных, описание, модули и другую описательную статистику для каждой переменной путем создания табличных сводных данных использование функции summary.
summary(T)
Variables:
A: 21x1 cell array of character vectors
B: 21x1 double
Values:
Min -99
Median 14
Max 563
NumMissing 3
C: 21x1 cell array of character vectors
D: 21x1 double
Values:
Min -99
Median 7
Max 563
NumMissing 2
E: 21x1 double
Values:
Min -99
Median 14
Max 563
Когда вы импортируете данные из файла, значение по умолчанию для readtable, чтобы считать любые переменные с нечисловыми элементами как массив ячеек из символьных векторов.
Отобразите подмножество строк из таблицы, T, которые имеют по крайней мере одно отсутствующее значение.
TF = ismissing(T,{'' '.' 'NA' NaN -99});
T(any(TF,2),:)ans=5×5 table
A B C D E
______ ___ _____ ___ ___
'egh3' NaN 'no' 7 7
'abk6' 563 '' 563 563
'wba3' NaN 'yes' NaN 14
'poj2' -99 'yes' -99 -99
'gry5' NaN 'yes' NaN 21
readtable заменил '.' и 'NA' с NaN в числовых переменных, B, D и E.
Уберите данные так, чтобы отсутствующие значения, обозначенные кодом -99, имели стандартный MATLAB® числовой индикатор отсутствующего значения, NaN.
T = standardizeMissing(T,-99)
T=21×5 table
A B C D E
______ ____ _____ ____ ____
'afe1' 3 'yes' 3 3
'egh3' NaN 'no' 7 7
'wth4' 3 'yes' 3 3
'atn2' 23 'no' 23 23
'arg1' 5 'yes' 5 5
'jre3' 34.6 'yes' 34.6 34.6
'wen9' 234 'yes' 234 234
'ple2' 2 'no' 2 2
'dbo8' 5 'no' 5 5
'oii4' 5 'yes' 5 5
'wnk3' 245 'yes' 245 245
'abk6' 563 '' 563 563
'pnj5' 463 'no' 463 463
'wnn3' 6 'no' 6 6
'oks9' 23 'yes' 23 23
'wba3' NaN 'yes' NaN 14
⋮
standardizeMissing заменяет три экземпляра -99 с NaN.
Составьте новую таблицу, T2, и замените отсутствующие значения на значения из предыдущих строк таблицы. fillmissing обеспечивает много способов заполнить отсутствующие значения.
T2 = fillmissing(T,'previous')T2=21×5 table
A B C D E
______ ____ _____ ____ ____
'afe1' 3 'yes' 3 3
'egh3' 3 'no' 7 7
'wth4' 3 'yes' 3 3
'atn2' 23 'no' 23 23
'arg1' 5 'yes' 5 5
'jre3' 34.6 'yes' 34.6 34.6
'wen9' 234 'yes' 234 234
'ple2' 2 'no' 2 2
'dbo8' 5 'no' 5 5
'oii4' 5 'yes' 5 5
'wnk3' 245 'yes' 245 245
'abk6' 563 'yes' 563 563
'pnj5' 463 'no' 463 463
'wnn3' 6 'no' 6 6
'oks9' 23 'yes' 23 23
'wba3' 23 'yes' 23 14
⋮
Составьте новую таблицу, T3, который содержит только строки от T без отсутствующих значений.
T3 = rmmissing(T)
T3=16×5 table
A B C D E
______ ____ _____ ____ ____
'afe1' 3 'yes' 3 3
'wth4' 3 'yes' 3 3
'atn2' 23 'no' 23 23
'arg1' 5 'yes' 5 5
'jre3' 34.6 'yes' 34.6 34.6
'wen9' 234 'yes' 234 234
'ple2' 2 'no' 2 2
'dbo8' 5 'no' 5 5
'oii4' 5 'yes' 5 5
'wnk3' 245 'yes' 245 245
'pnj5' 463 'no' 463 463
'wnn3' 6 'no' 6 6
'oks9' 23 'yes' 23 23
'pkn4' 2 'no' 2 2
'adw3' 22 'no' 22 22
'bas8' 23 'no' 23 23
T3 содержит 16 строк и пять переменных.
Сортировка строк T3 в порядке убывания C, и затем видом в порядке возрастания A.
T3 = sortrows(T2,{'C','A'},{'descend','ascend'})T3=21×5 table
A B C D E
______ ____ _____ ____ ____
'abk6' 563 'yes' 563 563
'afe1' 3 'yes' 3 3
'arg1' 5 'yes' 5 5
'gry5' 23 'yes' 23 21
'jre3' 34.6 'yes' 34.6 34.6
'oii4' 5 'yes' 5 5
'oks9' 23 'yes' 23 23
'poj2' 22 'yes' 22 22
'wba3' 23 'yes' 23 14
'wen9' 234 'yes' 234 234
'wnk3' 245 'yes' 245 245
'wth4' 3 'yes' 3 3
'adw3' 22 'no' 22 22
'atn2' 23 'no' 23 23
'bas8' 23 'no' 23 23
'dbo8' 5 'no' 5 5
⋮
В C строки сгруппированы сначала 'yes', сопровождаемым 'no'. Затем в A, строки перечислены в алфавитном порядке.
Переупорядочьте таблицу так, чтобы A и C были друг рядом с другом.
T3 = T3(:,{'A','C','B','D','E'})T3=21×5 table
A C B D E
______ _____ ____ ____ ____
'abk6' 'yes' 563 563 563
'afe1' 'yes' 3 3 3
'arg1' 'yes' 5 5 5
'gry5' 'yes' 23 23 21
'jre3' 'yes' 34.6 34.6 34.6
'oii4' 'yes' 5 5 5
'oks9' 'yes' 23 23 23
'poj2' 'yes' 22 22 22
'wba3' 'yes' 23 23 14
'wen9' 'yes' 234 234 234
'wnk3' 'yes' 245 245 245
'wth4' 'yes' 3 3 3
'adw3' 'no' 22 22 22
'atn2' 'no' 23 23 23
'bas8' 'no' 23 23 23
'dbo8' 'no' 5 5 5
⋮
fillmissing | ismissing | readtable | rmmissing | sortrows | standardizeMissing | сводные данные