我需要在Julia中丢失一个缺少值的文件(" NA") 我用来读取文件的命令是:
file = readdlm("FILE_NAs.txt", header=false)
问题是我不能在数学方程中使用这些文件(比如矩阵乘法),因为" NA" s。
我试图使用包" 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
答案 0 :(得分: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
的行为类似于柱状DataArray
的向量。请注意,将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
大师可能知道一种更简单的方法。