最近、dplyr()を使用してグループ内の値の最初の出現以外のすべてを抑止する方法をアドバイスしました。dplyrグループ内の値の次のn個のオカレンスを抑制する
解決策は本当に巧妙なものでしたが、今度はn個の次の値だけを抑制する必要がある場合に、同じように効率的なものを見つけるのに苦労しています。例えば
、I以下のコードで新たな "タグ" 欄作成:setosaグループ行で
library('dplyr')
data(iris)
set.seed(1)
iris$tag <- sample(c(0,1), 150, replace=TRUE, prob = c(0.7, 0.3))
giris <- iris %>% group_by(Species)
# Source: local data frame [150 x 6]
# Groups: Species [3]
#
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species tag
# (dbl) (dbl) (dbl) (dbl) (fctr) (dbl)
# 1 5.1 3.5 1.4 0.2 setosa 0
# 2 4.9 3.0 1.4 0.2 setosa 0
# 3 4.7 3.2 1.3 0.2 setosa 0
# 4 4.6 3.1 1.5 0.2 setosa 1
# 5 5.0 3.6 1.4 0.2 setosa 0
# 6 5.4 3.9 1.7 0.4 setosa 1
# 7 4.6 3.4 1.4 0.3 setosa 1
# 8 5.0 3.4 1.5 0.2 setosa 0
# 9 4.4 2.9 1.4 0.2 setosa 0
# 10 4.9 3.1 1.5 0.1 setosa 0
# .. ... ... ... ... ... ...
:4、6、7、... "1" としてタグ付けされています。私は、 "1"が発生した後に次の2つの行で "1"を抑制しようとしています(つまり、それらを "0"に変換しようとしています)。言い換えれば、行#5と#6は "0"に設定されなければならないが、#7は影響を受けないままであるべきである。この場合、7行目は「1」なので、8行目と9行目は「0」に設定する必要があります。
dplyrでこれを行う方法についてのヒントはありますか?いくつかのより多くの例このパッケージは本当に強力ですが、その理由のために、それは私がすべての機微を習得するための精神的な挑戦です...
: の場合:0 0 1 1、出力は0にしてください以下の場合は0 1 0 :0 0 1 1 1 1 1、出力が0 0 1 0 0 1 0
シーケンス0 0 1 1 1 1 1があるのであれば、それは0 0 1 0 0 1 0になる必要がありますか? – Frank
@ Frank確かに、これは期待される出力です – rpl