連続する1または2を0の列に置き換えようとしています。私はループを除いてこれを行う方法を考えることはできません。これはRのベストプラクティスには本当に適合しません。誰も "Rの方法"でこれを行う方法のヒントを提供することはできますか?文字列の繰り返し値を0に置き換えます。
set.seed(42)
temp<-sample(c(2,1),10,replace=T)
df<-data.frame(vals=temp)
例の結果:
vals goal
1 1 1
2 1 0
3 2 2
4 1 1
5 1 0
6 1 0
7 1 0
8 2 2
9 1 1
10 1 0
私の(非稼働)の試行:
#get all strings with 1
match <- gregexpr("1+", as.vector(df$vals))
#iterate over all matches and create vectors that replace consecutive values with 0 based on the length of match.length
lapply(match,function(y){
sapply(attr(y, "match.length"),function(x)rep(0,x))
})
必要であれば、ちょうど別の例を追加する:
val goal
1 1
2 2
2 0
2 0
1 1
1 0
1 0
また、同様に、 'df $ vals [(diff(df $ vals)== 0)+ 1L] < - 0'です。これをあなたの答えに自由に編集してください –
私は通常のプラグイン「rle」または私自身の「seqle」に入れます。 –