2016-06-16 79 views
2

我想將「Yes」/「No」字符串數組轉換爲布爾類型。在Julia中將字符串轉換爲布爾值

起初,我檢查是否有來港目前: convert(Array, datsub[:s734y])沒有工作,所以有來港 所以我轉換來港爲「否」 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

任何想法爲什麼我的代碼是錯的?

附錄:在這一點上,類型轉換對我來說是一個普遍的挫敗感。

回答

5

蘭迪的答案對於強大而強大的東西(例如可以處理大寫和/或小寫的值)非常有用。對於一些快速和骯髒的,只要你有一個「乾淨」的數組開始(例如,沒有資本化等問題),你可以使用這個,將工作:

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") 

在許多情況下,布爾和BitArray在很大程度上是可互換的,非常類似的功能。有關這些類型之間的差異和相似性的一些信息,請參閱(What's the difference between Array{Bool} and BitArray in Julia and how are they related?

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來容易地擴展任何可能接受的任何字符串值。

+0

感謝@RandyZwitch,我最終使用了代碼,因爲它更簡單一些,但我將返回給您以備將來轉換! – Nick