Как правильно обращаться с "NA" в Юлии

Мне нужно перебрать файл с пропущенными значениями ("NA") в Julia.
Команда, которую я использую для чтения файла:

file = readdlm("FILE_NAs.txt", header=false)

Проблема в том, что я не могу использовать эти файлы в математических уравнениях (например, умножение матриц), потому что "нет".
Я пытался использовать пакет "DataArray" и функцию "dropna (файл)", но не получилось.
Итак, я хотел бы игнорировать или даже удалить эти значения "NA".

Вот пример загруженного файла (разделенный пробелами):

"Ind1" "NA"  "NA"  "NA"   "NA"   "NA"   "NA"  2   "NA"   "NA"
"Ind2" "NA"  "NA"  "NA"   "NA"   "NA"   "NA"  2   "NA"   "NA"
"Ind3" "NA"  "NA"  "NA"   "NA"   "NA"   "NA"  1   "NA"   "NA"
"Ind4" "NA"  "NA"  "NA"   "NA"   "NA"   "NA"  2   "NA"   "NA"
"Ind5" 0     0     0      0      0      0     1   0      0 
"Ind6" 1     0     0      0      1      1     2   1      1 
"Ind7" 1     0     0      0      1      1     2   1      1 
"Ind8" 0     0     0      0      0      0     2   0      0

1 ответ

Решение

NA Тип явно предназначен для отравления операций линейной алгебры, поэтому не следует умножать массивы на NA в них.

Я предполагаю, что вы загружаете данные с чем-то вроде

using DataFrames
x = readtable("FILE_NAs.txt", header = false, separator = ' ')

Если вы просто хотите удалить строки, содержащие NA, то самое простое, что можно сделать, это позвонить

y = DataFrames.na_omit(x)[1]

Это даст новый DataFrame где любая строка, содержащая NA был очищен Если вы хотите извлечь числовые данные из вашего файла примера, то что-то вроде

z = convert(Matrix{Int}, y[2:end])

должно сработать. Мы можем индексировать y как вектор, потому что DataFrame ведет себя как столбчатый вектор DataArrays. Обратите внимание, что преобразование DataFrame с NA записи в Matrix потерпит неудачу

Если вместо этого вы хотите очистить по столбцу, то определите, какие столбцы имеют NA в них. Один из способов сделать это через

# get a Bool array of NA positions
y = array(map(isna, eachcol(x)))

# get a vector indexing columns with NA in them
z = vec(!reducedim(|, y, 1))

# now extract columns of x with no missing data
x[z] # <-- only has rows x1, x8

DataFrame гуру могут знать более простой способ сделать это.

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