2017-10-05 4 views
-4

J'ai une séquence de nombres que je veux vérifier et rejeter des nombres qui n'augmentent pas avec le même niveau.rejeter des nombres dans une séquence de nombres qui n'augmentent pas avec la même augmentation

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

Par exemple, pour les données ici que je veux sous-ensemble des nombres avec une augmentation de 0,25 +/- 0,1, et de rejeter des chiffres qui ne suivent pas cette règle. Dans ce cas, la séquence sous-traitée serait (6, 6,25, 6,49, 6,75, 7,01).

+2

Bienvenue sur SO. Ce site n'est pas un service d'écriture de code et n'est pas destiné à fournir des solutions complètes. Les utilisateurs doivent faire preuve d'effort et de code tandis que SO est là pour vous aider à résoudre des problèmes de programmation spécifiques en cours de route. Avez-vous déjà essayé quelque chose? Veuillez lire: https://stackoverflow.com/help/asking –

Répondre

-1

Voici une façon laide de saisir les index que vous souhaitez conserver. Changer 0.35 si vous êtes intéressé par une autre valeur de coupure

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

Appelez la fonction pour obtenir la réponse que vous voulez avec

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

Un autre test

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

Vous pouvez supprimer la dépendance 'dplyr' en remplaçant' which (dplyr :: lag (abs (diff (D)) <0.35, 1)) 'avec (abs (diff (D)) <0,35) + 1'. Le 'lag' ajoute essentiellement un aux indices VRAI. – Gregor

+0

J'ai mentionné qu'il était moche – CPak