我正在嘗試檢索具有缺失值的字串向量中模式的所有實體的索引。
例如,我怎樣才能得到一個包含所有實體索引的向量"a":
x = ["ab", "ca", "bc", missing, "ad"]
期望的結果將等于:
Vector([1, 2, 5])
3-element Vector{Int64}:
1
2
5
因為這些是模式出現的索引。
uj5u.com熱心網友回復:
一種自然的寫法是:
julia> findall(v -> ismissing(v) ? false : contains(v, "a"), x)
3-element Vector{Int64}:
1
2
5
或者你可以寫:
julia> using Missings
julia> findall(coalesce.(passmissing(contains).(x, "a"), false))
3-element Vector{Int64}:
1
2
5
在這種情況下的可讀性,但在其他情況下,你可能會發現passmissing和coalesce有用的,所以我提到他們。
uj5u.com熱心網友回復:
該findall版本還可以更簡潔:
julia> findall(contains("a"), skipmissing(x))
3-element Vector{Int64}:
1
2
5
關于此的第一件很酷的事情是contains,當僅提供要搜索的模式時,它會回傳其自身的柯里化版本。所以在這里,contains("a")回傳一個"a"在任何給定字串引數中搜索的函式,我們將該函式findall作為謂詞傳遞給。
更酷的是skipmissing作業方式。顧名思義,它會跳過missing引數中的值,但它不僅將它們從x(這將更改missings之后的所有值的索引)中過濾掉,而且還提供了一個僅跳過這些missing值的迭代器。這意味著findall通過迭代回傳的索引skipmissing(x)也將有效x,這正是我們想要的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/382317.html
上一篇:過濾字串串列
下一篇:索引的基本字串切片
