identifier certaines valeurs dans une matrice

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Lelandais ludovic
Messages : 11
Enregistré le : 20 Fév 2019, 11:11

identifier certaines valeurs dans une matrice

Messagepar Lelandais ludovic » 14 Mar 2019, 11:46

Bonjour,

voilà je dois analyser des séries de données, parmi lesquelles j'aimerai mettre en évidence/retenir uniquement certaines valeurs comprises dans un intervalle.

Voici ci dessous un exemple de code reproductible ( j'espère)

Code : Tout sélectionner

M <- matrix( ncol=3,nrow=5)
M[,1]<- 2                                     ## Lim inferieure
M[,2] <- 5                                    ## Lim superieure
M[,3] <- c(1,3,3.5,4,6)                       ## les données

plot(M[,1],col="blue",typ="l",ylim=c(0,6))
points(M[,2], col="blue",typ="l")
points(M[,3], col="black",typ="p")


dans cet exemple j'aimerai que les points M[2,3],M[3,3],M[4,3] soient "marqués" car compris entre 2 et 5 et les autres marqué différemment.

J'ai pour le moment créer une 4ème colonne " flag" avec une boucle for

Code : Tout sélectionner

M <- cbind(M,c( 0,0,0,0,0))

for (i in 1 : length(M[,3]
 if ( M[i,3] < M[i,1] | M[i,3]> M[i,2]
{M[i,4] <- 1}
else
{M[i,4] <- 0}


cela fonctionne mais ma matrice fait 400 000 lignes donc cela prend beaucoup de temps et je dois faire cela sur plusieurs matrices avez vous une solution plus "courte" avec une fonction par exemple?

Cordialement.
Ludovic

Pierre-Yves Berrard
Messages : 685
Enregistré le : 12 Jan 2016, 23:30

Re: identifier certaines valeurs dans une matrice

Messagepar Pierre-Yves Berrard » 14 Mar 2019, 14:11

Bonjour,

Si l'intervalle [2;5] est valable quelle que soit la ligne :

Code : Tout sélectionner

binf <- 2
bsup <- 5
M2 <- cbind(
  M,
  M[,3] < binf | M[,3] > bsup
)

Si les bornes sont potentiellement différentes pour chaque ligne :

Code : Tout sélectionner

M3 <- cbind(
  M,
  apply(M, 1, function(x) x[3] < x[1] | x[3] > x[2])
)
PY

Lelandais ludovic
Messages : 11
Enregistré le : 20 Fév 2019, 11:11

Re: identifier certaines valeurs dans une matrice

Messagepar Lelandais ludovic » 14 Mar 2019, 14:31

super, cela fonctionne sans souci,
c'est vraiment quasi instantané par rapport au boucle ça change la vie
un grand merci PY :)


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Bing [Bot] et 2 invités