julia - 如何将值更改为缺失

标签 julia missing-data

我似乎无法在 Julia 版本 0.6.4 中将值更改为缺失(我相信在 0.6 之前是允许的)。

示例代码:

using Dataframes
x = zeros(5)
5-element Array{Float64,1}:
 0.0
 0.0
 0.0
 0.0
 0.0
x[3] = missing
ERROR: MethodError: Cannot `convert` an object of type Missings.Missing to an     
object of type Float64
This may have arisen from a call to the constructor Float64(...),
since type constructors fall back to convert methods.
Stacktrace:
[1] setindex!(::Array{Float64,1}, ::Missings.Missing, ::Int64) at ./array.jl:583

在此设置中,我尝试将某些索引编码为缺失值以进行分析。有没有简单的解决方法?

最佳答案

missing Julia 有自己的类型:

julia> typeof(missing)
Missings.Missing

就您的情况而言,特别重要的是要注意:

julia> Missing <: Float64
false

Missing不是 Float64 的子类型。现在,请注意:

julia> typeof(zeros(5))
Array{Float64,1}

所以你构造 x ,一个应该包含 Float64 的数组。自 missing不是 Float64 的子类型,当您尝试更改 x 的元素之一时至missing ,你会得到一个错误,就像你尝试 x[3] = "a string" 时会得到一个错误一样。 .

如果您希望数组同时包含 Missing 类型和类型 Float64 ,那么您需要预先指定数组的元素可以是 Missing 类型或输入Float64 。在 Julia v0.6(您在问题中指定)中,您可以通过 missings 执行此操作,位于 Missings.jl 包中,例如:

julia> x = missings(Float64, 2)
2-element Array{Union{Float64, Missings.Missing},1}:
 missing
 missing

julia> x[1] = 0.0
0.0

julia> x
2-element Array{Union{Float64, Missings.Missing},1}:
 0.0     
  missing

在v1.0中,与missing相关的核心功能搬入Base ,所以你需要:

julia> Array{Union{Float64,Missing}}(missing, 2)
2-element Array{Union{Missing, Float64},1}:
 missing
 missing

这确实有点麻烦。然而,missings v0.6 的语法在 Missings.jl 中仍可用于 v1.0。只是很多人可能会选择不理会这个,因为类型Missing其本身已移至 Base ,因此您不需要 Missings.jl,这与 v0.6 不同。

如果您已经有一个预先存在的Array{Float64}并希望将某些元素标记为 missing ,那么(据我所知)你将需要重新构建数组。例如,在 v0.6 和 v1.0 中您可以使用:

julia> x = randn(2)
2-element Array{Float64,1}:
 -0.642867
 -1.17995 

julia> y = convert(Vector{Union{Missing,Float64}}, x)
2-element Array{Union{Float64, Missings.Missing},1}:
 -0.642867
 -1.17995 

julia> y[2] = missing
missing

请注意missing通常设想用于像 DataFrames 这样的数据类型,其中很多事情会自动为您发生,因此您不必浪费时间输入这么多 Union s。这可能是像您这样使用常规数组时语法有点冗长的原因之一。

最后一点:您当然可以显式构造数组以接受任何类型,例如x = Any[1.0, 2.0] ; x[1] = missing 。缺点是现在编译器无法生成类型高效的代码来处理 x因此您将失去在 Julia 中工作的速度优势。

关于julia - 如何将值更改为缺失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52638102/

相关文章:

c++ - "cout<<count<<endl;"没有打印任何东西

python - 有条件地替换 Pandas 数据框中的空白值

templates - Julia 函数签名和子类型,特别是 String、ByteString

julia - new() 用于 Julia 数组

python - Julia 字符串格式 "if"

python - 在 Python 中替换缺失值

r - 空白字符串不能用R中的NA替换

r - 在具有嵌套组的数据框中插入带零的行

julia - 错误:BoundsError:尝试访问索引为[0]的1元素数组{SubString {String},1}

c++ - 在 Windows 上使用带有 Cxx.jl 的 Julia 中的 boost 库