2017-10-05 7 views
-4

비슷한 수준으로 증가하지 않는 숫자를 확인하고 거부하고 싶은 일련의 숫자가 있습니다. 나는 0.25 +/- 0.1의 증가 숫자를 부분 집합하고,이 규칙을 따르지 않는 번호를 거부 할 여기에 데이터를 예를 들어동일한 증가로 증가하지 않는 숫자 순서의 번호를 거부하십시오.

data <- c(1, 2, 5, 6, 6.25, 6.49, 6.75, 7.01, 8, 9, 11) 

. 이 경우 부분 집합 시퀀스는 (6, 6.25, 6.49, 6.75, 7.01)이됩니다.

+2

에 오신 것을 환영합니다 SO와 당신이 원하는 답을 얻을 수있는 기능에 관심이 있다면 0.35을 변경합니다. 이 사이트는 코드 작성 서비스가 아니며 완벽한 솔루션을 제공하기위한 것이 아닙니다. 사용자는 특정 프로그래밍 문제를 해결하는 데 도움이되도록 노력과 코드를 제시해야합니다. 벌써 시도해 봤니? https://stackoverflow.com/help/asking –

답변

-1

다음은 유지하려는 색인을 잡는 추악한 방법입니다. 다른 컷오프 값

myfun <- function(D) { 
      index <- unique(c(which(abs(diff(D)) < 0.35), which(abs(diff(D)) < 0.35)+1)) 
      return(sort(index)) 
     } 

전화

data[myfun(data)] 
# [1] 6.00 6.25 6.49 6.75 7.01 

또 다른 시험

test <- c(1, 1.25, 2, 2.25, 3, 4.5, 4.75, 5, 5.45, 5.65) 
test[myfun(test)] 
# [1] 1.00 1.25 2.00 2.25 4.50 4.75 5.00 5.45 
+0

'(dplyr :: lag (abs (diff (D) <0.35, 1))'을'로 대체하여'dplyr' 종속성을 제거 할 수 있습니다. (abs (diff (D)) <0.35) +1이다. 'lag'은 기본적으로 TRUE 인덱스에 1을 더한다. – Gregor

+0

나는 그것이 추했다라고 언급했다 – CPak