我想知道为什么不能使用NA值索引Julia的DataArrays.执行下面的剪切会导致错误(NAException("无法使用包含NA值的DataArray索引数组")):
dm = data([1 4 7; 2 5 8; 3 1 9])
dm[dm .== 5] = NA
dm[dm .< 3] = 1 #Error
dm[(!isna(dm)) & (dm .< 3)] = 1 #Working
Run Code Online (Sandbox Code Playgroud)
有一个解决方案可以忽略数据框架中的NA isna(),就像这里回答的那样.乍一看它的工作方式应该如此,忽略DataFrames中的NA是与DataArrays相同的方法,因为DataFr的每一列都是DataArray,在此处说明.但在我看来,忽略!isna()每个条件下的缺失值并不是最好的解决方案.
对我来说,如果包含NA,DataTrame模块会抛出错误的原因尚不清楚.如果索引所需的布尔数组具有NA的值,则此值应转换为false类似MATLAB®或Pythons Pandas 的值.在indexing.jl中的DataArray模块源代码(如下所示)中,有一个显式函数抛出NAException:
# Indexing with NA throws an error
function Base.to_index(A::DataArray)
any(A.na) && throw(NAException("cannot index an array with a DataArray containing NA values"))
Base.to_index(A.data)
end
Run Code Online (Sandbox Code Playgroud)
如果您通过将NA设置为false来更改代码段...
# Indexing with NA throws an error
function Base.to_index(A::DataArray) …Run Code Online (Sandbox Code Playgroud)