標準的な「ループを回避できる」問題がありますが、解決策が見つかりません。
私は@splaisanでこの質問for
に答えましたが、中間セクションでいくつかの醜いゆがみに頼らなければなりませんでしたif
。誰かがより良い答えを出せることを期待して、ここでより単純なバージョンをシミュレートします...
問題
次のようなデータ構造があるとします。
df <- read.table(text = 'type
a
a
a
b
b
c
c
c
c
d
e', header = TRUE)
同じタイプの連続したチャンクを識別し、それらをグループに分類したいと考えています。最初のチャンクには 0、次のチャンクには 1 というようにラベルを付ける必要があります。チャンクの数は不定であり、各チャンクは 1 つのメンバーだけと同じくらい短い場合があります。
type label
a 0
a 0
a 0
b 1
b 1
c 2
c 2
c 2
c 2
d 3
e 4
私の解決策
for
これを行うにはループに頼らなければなりませんでした。コードは次のとおりです。
label <- 0
df$label <- label
# LOOP through the label column and increment the label
# whenever a new type is found
for (i in 2:length(df$type)) {
if (df$type[i-1] != df$type[i]) { label <- label + 1 }
df$label[i] <- label
}
私の質問
ループと条件なしで誰でもこれを行うことができますか?