2

私は論文のデータを分析し始めています。最初に、連続する文字列を 1 つとしてカウントする必要があります。サンプル ベクトルは次のとおりです。

test <- c("vv","vv","vv","bb","bb","bb","","cc","cc","vv","vv")

UNIX コマンド uniq のように、単純に一意の値を抽出したいと思います。したがって、期待される出力は次のようなベクトルになります。

"vv"、"bb"、"cc"、"vv"

私はrle関数を見ましたが、これは問題ないようですが、rleの出力をベクトルとして取得するにはどうすればよいですか? 私はrleクラスを理解していないようです...

> rle(test)
Run Length Encoding
  lengths: int [1:5] 3 3 1 2 2
  values : chr [1:5] "vv" "bb" "" "cc" "vv"

rle によって出力された値のベクトルと長さの別のベクトルを取得するにはどうすればよいですか? 私が自分自身を明確にしていることを願っています...

助けてくれてありがとう!

4

2 に答える 2

2

rle()クラスの2要素リストを返します"rle"; @gskが指摘しているように、通常のリストインデックス構造を使用してコンポーネントベクトルにアクセスできます。

また、これを試して、の結果をrleより使い慣れた形式に変換してください。

as.data.frame(rev(unclass(rle(test))))
#   values lengths
# 1     vv       3
# 2     bb       3
# 3              1
# 4     cc       2
# 5     vv       2
于 2012-06-16T18:47:21.503 に答える
2

出典: http://www.sigmafield.org/2009/09/22/r-function-of-the-day-rle

解決:rle(test)$values

彼らは次を使用します:coin.rle <- rle(coin)そしてcoin.rle$valuesrle(test)$valuesうまくいくはずです。

于 2012-06-16T18:52:25.690 に答える