首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Julia中更改级别

如何在Julia中更改级别
EN

Stack Overflow用户
提问于 2019-08-12 15:27:25
回答 2查看 118关注 0票数 1

我想改变向量的级数,但我不知道如何在julia中做到这一点。

我的julia版本是1.1,我的代码是:

代码语言:javascript
运行
复制
Sire = ["ZA","AD","BB","AD","AD","CC","CC","AD","AD"]
levels(Sire)
levels(Sire) = [1,2,3,4]

错误消息:

代码语言:javascript
运行
复制
julia> levels(Sire) = [1,2,3,4]
ERROR: error in method definition: function Missings.levels must be explicitly imported to be extended
Stacktrace:
 [1] top-level scope at none:0
EN

回答 2

Stack Overflow用户

发布于 2019-08-12 17:53:08

你可能想使用CategoricalArrays.jl包来处理分类数据(如果你需要更多关于它的信息,请发表评论,我可以给你更多信息)。

如果你使用标准的Vector,你可以像这样使用replace函数:

代码语言:javascript
运行
复制
julia> Sire = ["ZA","AD","BB","AD","AD","CC","CC","AD","AD"]
9-element Array{String,1}:
 "ZA"
 "AD"
 "BB"
 "AD"
 "AD"
 "CC"
 "CC"
 "AD"
 "AD"

julia> l = unique(Sire)
4-element Array{String,1}:
 "ZA"
 "AD"
 "BB"
 "CC"

julia> replace(Sire, Pair.(l, axes(l, 1))...)
9-element Array{Any,1}:
 1
 2
 3
 2
 2
 4
 4
 2
 2

或者,您可以手动完成最后一步:

代码语言:javascript
运行
复制
julia> replace(Sire, "ZA"=>1, "AD"=>2, "BB"=>3, "CC"=>4)
9-element Array{Any,1}:
 1
 2
 3
 2
 2
 4
 4
 2
 2

请注意,unique按照值的出现顺序返回值。如果你想要一个特定的订单,你应该相应地改变l (例如sort! it)。

票数 0
EN

Stack Overflow用户

发布于 2019-08-13 10:00:39

我做一个总结:

代码语言:javascript
运行
复制
Sire = ["ZA","AD","BB","AD","AD","CC","CC","AD","AD"]

# methods 1
a1 = deepcopy(Sire)
new = collect(1:length(levels(Sire)))
d = Dict(zip(levels(a1),new))
using CategoricalArrays
re1 = recode(a1,d...)

# methods 2
a2 = deepcopy(Sire)
new = collect(1:length(levels(Sire)))
un = unique(a2)
replace(a2, Pair.(un, axes(un, 1))...)


# methods 3
a3 = deepcopy(Sire)
new = collect(1:length(levels(a3)))
d = Dict(zip(levels(a3),new))
re3 = replace(a3,d...)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57457123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档