연속적인 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'에 대한 플러그를 넣을 것입니다. –