裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

Julia の小ネタ--026 R の rle(), Run Length Encoding

2021年06月03日 | ブログラミング

同じ文字列が何個続くか勘定する。

aabbbcccc なら,a が 2個,b が 3個,c が 4個なので,([2, 3, 4], ["a", "b", "c"]) のようなタプルを返す。

function rle(x)
    """ Run Length Encoding
    Compute the lengths and values of runs of equal values in a vector – or the reverse operation.
    
    rle("001111000000011")
    # ([2, 4, 7, 2], ["0", "1", "0", "1"])

    rle("aabcccbbbaab")
    # ([2, 1, 3, 3, 2, 1], ["a", "b", "c", "b", "a", "b"])
    """
    s = split(x, "")
    n = length(x)
    n == 0 && return (Int[], "")
    y = s[2:end] .!= s[1:end-1]
    i = vcat((1:length(y))[y], n)
    diff(vcat(0, i)), string.(s[i])rle(
end

rle("001111000000011") # ([2, 4, 7, 2], ["0", "1", "0", "1"])
rle("aabcccbbbaab")    # ([2, 1, 3, 3, 2, 1], ["a", "b", "c", "b", "a", "b"])

StatsBase にも rle() という関数がある。全く同じことをやるのだが,引数はベクトルである。返すタプルも,(種類, 個数) の順。

 

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Julia で多項式,求解,多項... | トップ | Julia の小ネタ--027 素数に... »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事