gpt4 book ai didi

arrays - Julia:将分类数组转换为数值数组的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 12:17:57 26 4
gpt4 key购买 nike

将分类数组转换为简单数值数组的完美方法是什么?
例如:

using CategoricalArrays
a = CategoricalArray(["X", "X", "Y", "Z", "Y", "Y", "Z"])
b = recode(a, "X"=>1, "Y"=>2, "Z"=>3)
作为转换的结果,我们仍然得到一个分类数组,即使我们明确指定了赋值的类型:
b = recode(a, "X"=>1::Int64, "Y"=>2::Int64, "Z"=>3::Int64)
看起来这里需要一些其他方法,但我想不出一个方向

最佳答案

你有两个自然选择:

julia> recode(unwrap.(a), "X"=>1, "Y"=>2, "Z"=>3)
7-element Vector{Int64}:
1
1
2
3
2
2
3
或者
julia> mapping = Dict("X"=>1, "Y"=>2, "Z"=>3)
Dict{String, Int64} with 3 entries:
"Y" => 2
"Z" => 3
"X" => 1

julia> [mapping[v] for v in a]
7-element Vector{Int64}:
1
1
2
3
2
2
3
Dict方法较慢,但如果您要映射多个级别,则它更灵活。
这里的关键函数是 unwrap这放弃了 CategoricalValue 的“分类”概念(在 Dict 样式中 unwrap 被自动调用)
另请注意,如果您只想获取 levelcode s 中存储的值 CategoricalArray (默认情况下 R 会做的事情)然后你可以这样做:
julia> levelcode.(a)
7-element Vector{Int64}:
1
1
2
3
2
2
3
另请注意,使用 levelcode missing映射到 missing :
julia> x = CategoricalArray(["Y", "X", missing, "Z"])
4-element CategoricalArray{Union{Missing, String},1,UInt32}:
"Y"
"X"
missing
"Z"

julia> levelcode.(x)
4-element Vector{Union{Missing, Int64}}:
2
1
missing
3

关于arrays - Julia:将分类数组转换为数值数组的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67469468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com