如何处理朱莉娅的“NA”

问题描述 投票:0回答:1

我需要处理Julia中缺少值(“NA”)的文件。 我用来读取文件的命令是:

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

问题是我不能在数学方程中使用这个文件(比如矩阵乘法)因为“NA”。 我试图使用包“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
julia missing-data
1个回答
2
投票

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的矢量。请注意,DataFrameNA条目转换为Matrixfail

如果您希望按列清除,则确定哪些列中包含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大师可能知道一种更简单的方法。

© www.soinside.com 2019 - 2024. All rights reserved.