在Julia中从字符串转换为布尔值

时间:2016-06-16 20:39:09

标签: string types boolean julia

我想将“是”/“否”的字符串数组转换为布尔类型。

首先,我检查了是否存在NAs: convert(Array, datsub[:s734y])哪些不起作用,所以有NAs 所以我将NAs转换为“否” datsub[isna(datsub[:s734y]),:s734y] = "No"

然后这个工作: map(s->s==""||s=="NA" ? "No" : s, datsub[:s734y])所以我有点肯定(也是从查看数据集)我只有“是”/“否”值

我将其转换为布尔值的代码是: convert(Vector{Bool}, map(q-> tryparse(Bool, q), datsub[:s734y])) 返回Inexact Error

知道为什么我的代码错了吗?

附录:此时类型转换对我来说是一种普遍的挫败感。

2 个答案:

答案 0 :(得分:7)

如果没有可重复的示例,很难关注您的工作,但您可以执行以下操作:

julia> q = ["yes", "no"]

julia> parsebool(s::String) = lowercase(s) == "yes" ? true: false

julia> qbool = Bool[parsebool(x) for x in q]
2-element Array{Bool,1}:
true
false

虽然比使用内置函数稍微多一些工作,但您还可以为作为字符串遇到的每种类型的值定义自定义逻辑。我使用了三元运算符,所以我假设你只是“是”/“不”。但是,对于您可能使用if/elseif/else接受的任何字符串值系列,可以轻松扩展此示例。

答案 1 :(得分:5)

Randy的答案非常适合强大而强大的功能(例如,可以处理大小写和/或小写值)。对于快速和脏的东西,只要你有一个“干净”的数组开始工作(例如没有大写的问题等),你可以使用它:

Array1 = ["Yes", "Yes", "No", "No", "Yes"];
Array2 = Array1 .== "Yes"   

5-element BitArray{1}:
  true
  true
 false
 false
  true

.==对Array1中的每个元素进行逐元素逻辑比较,以查看它是否等于“是”。

注意:如果您真的想要Bools而不是BitArray,那么您可以使用:

Array2 = convert(Array{Bool}, Array1 .== "Yes")

在许多情况下,Bool和BitArray在很大程度上是可以互换的,功能非常相似。有关这些类型之间差异和相似之处的一些信息,请参阅(What's the difference between Array{Bool} and BitArray in Julia and how are they related?