2016-11-14 7 views
0

Мне нужно иметь файл с отсутствующими значениями («NA») в Julia.
Команда, я использую для чтения файла является:Как обращаться с «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

НС цитируется? можете ли вы дать нам фрагмент вашего файла данных и минимальный рабочий пример? вы могли бы загрузить его как файл с разделителями или «DataFrame», а затем просто подмножество против строк «NA»? –

+0

Да, я могу использовать другую функцию для загрузки файла. Честно говоря, я попробовал другие функции для загрузки файла, но тогда я не смог обработать файл, как я делаю с этой функцией (readdlm). –

ответ

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 ведет себя как вектор столбчатого столбца DataArray s. Обратите внимание, что преобразование DataFrame с NA вводами в Matrix будет fail.

Если вместо этого вы хотите очистить столбец, затем определите, в каких столбцах есть 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 гуру может знать простой способ сделать это.

+0

Привет. Это может быть вариант, если есть способ конвертировать этот файл с NA в массиве или матрице. Используя 'readtable', я не могу использовать остальную часть моего скрипта, содержащего такие функции, как' findin', например: 'tmp = file [findin (file, file2 [:, 1]):]. Является ли это возможным? Благодарю. –

+0

Я не понимаю, что делает этот код. Требуется ли индексирование 'findin'? обратите внимание, что объект DataArray - и по расширению DataFrame - требует [тщательного индексирования] (https://github.com/JuliaStats/DataArrays.jl/issues/207), так как NA также отравляет эту операцию. что касается преобразования в «Матрицу», см. отредактированный ответ. –

+0

Все еще не работает: /. Я утверждаю, что команда 'DataFrames.na_omit (x) [1]' не работает должным образом, потому что 'x' имеет размерность' 30 × 49620' и 'y' имеет' 0 × 49620'. –

 Смежные вопросы

  • Нет связанных вопросов^_^