Les posteurs les plus actifs de la semaine
Eric Wajnberg
[Résolu] Question algorithmique Vote_lcap[Résolu] Question algorithmique Voting_bar[Résolu] Question algorithmique Vote_rcap 
gg
[Résolu] Question algorithmique Vote_lcap[Résolu] Question algorithmique Voting_bar[Résolu] Question algorithmique Vote_rcap 
c@ssoulet
[Résolu] Question algorithmique Vote_lcap[Résolu] Question algorithmique Voting_bar[Résolu] Question algorithmique Vote_rcap 
lazof
[Résolu] Question algorithmique Vote_lcap[Résolu] Question algorithmique Voting_bar[Résolu] Question algorithmique Vote_rcap 
zezima
[Résolu] Question algorithmique Vote_lcap[Résolu] Question algorithmique Voting_bar[Résolu] Question algorithmique Vote_rcap 
davidpes85
[Résolu] Question algorithmique Vote_lcap[Résolu] Question algorithmique Voting_bar[Résolu] Question algorithmique Vote_rcap 
Volivoile
[Résolu] Question algorithmique Vote_lcap[Résolu] Question algorithmique Voting_bar[Résolu] Question algorithmique Vote_rcap 
Ayana
[Résolu] Question algorithmique Vote_lcap[Résolu] Question algorithmique Voting_bar[Résolu] Question algorithmique Vote_rcap 


[Résolu] Question algorithmique

Aller en bas

[Résolu] Question algorithmique Empty [Résolu] Question algorithmique

Message par zezima le Mar 9 Jan 2018 - 12:44

Bonjour,

J'ai une matrice :
Code:

testons=matrix(,2,5);testons[1,]=1:5;testons[2,]=c(FALSE,TRUE,FALSE,TRUE,TRUE);rownames(testons)=c("valeur","réponse")
testons

Mon objectif est de récupérer la valeur la plus faible étant donné que sa réponse est vraie et que les valeurs supérieures ont également une réponse vraie.
Dans l'exemple, ce serait récupérer la valeur 4 car elle a une réponse vraie et que la valeur supérieure (5) a également une réponse vraie.

J'aimerais faire cela de manière automatique mais je n'arrive pas à trouver un algorithme.

Auriez-vous une idée pour réussir à récupérer cette valeur automatiquement ?

Merci d'avance


Dernière édition par zezima le Mar 9 Jan 2018 - 15:21, édité 1 fois
zezima
zezima

Nombre de messages : 918
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

[Résolu] Question algorithmique Empty Re: [Résolu] Question algorithmique

Message par droopy le Mar 9 Jan 2018 - 13:44

Bonjour,

si tes données sont ordonnées comme dans ton exemple tu peux essayer ceci :
Code:
fun <- function(testons) {
  rle1 <- rle(testons["réponse",])
  pos <- which.max(cumsum(rle1$le > 1 & rle1$val > 0.5))
  pos <- sum(rle1$length[seq_len(pos-1)])+1
  res <- testons["valeur", pos]
  return(res)
}

fun(testons)
cdlt
droopy
droopy

Nombre de messages : 1136
Date d'inscription : 04/09/2009

Revenir en haut Aller en bas

[Résolu] Question algorithmique Empty Re: [Résolu] Question algorithmique

Message par zezima le Mar 9 Jan 2018 - 15:01

Bonjour Droopy,

Merci, ton code est génial !
Tu m'as fait découvrir rle(), qui est vachement utile.

Code:
fun <- function(testons) {
  rle1 <- rle(testons["réponse",])
  pos=ifelse(0%in%rle1$val,cumsum(rle1$le)[max(which(rle1$val==0))]+1,1)
  res=ifelse(tail(rle1$val,1)==0,"NS",testons["valeur", pos])
  return(res)
}

aaa=expand.grid(a=c(0,1),b=c(0,1),c=c(0,1),d=c(0,1),e=c(0,1));aaa
testons=list()
for(i in 1:32){
testons[[i]]=matrix(,2,5);testons[[i]][1,]=1:5;testons[[i]][2,]=as.numeric(aaa[i,]);rownames(testons[[i]])=c("valeur","réponse")
}
sapply(testons,function(x) fun(x))

Dans tous les cas de figures possible, la valeur renvoyée est la bonne.
Merci !
zezima
zezima

Nombre de messages : 918
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

[Résolu] Question algorithmique Empty Re: [Résolu] Question algorithmique

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum