J'ai des données du type :
Code : Tout sélectionner
couleur <- c("orange","bleu","vert","jaune","bleu","vert","bleu")
code <- c("1","1","1","1","2","2","3")
nombre <-c(33.5,24,508,345,32.6,44,2.1)
data<-data.frame(couleur,code,nombre)
Je souhaite que le script me renvoie les deux lignes correspondantes aux deux premières valeurs maximales par code. Par exemple pour 1 je souhaite obtenir les lignes correspondantes aux valeurs de 508 et 345. Je souhaite réaliser cela sur l'ensemble des cellules de la colonne code. J'ai donc le script suivant :
Code : Tout sélectionner
Max_nombre <- function(data){
data <- data[data$nombre == head(sort(data$nombre,decreasing = TRUE), 2),]
return(data)
}
data<- by(data,as.factor(data$code),Max_nombre)
data_VF <- do.call(rbind,data)
Cependant quand je fais cela, j'obtiens le warning suivant : "longer object length is not a multiple of shorter object length" et certaines valeurs disparaissent. Par exemple pour le code "2" je devrais obtenir les deux uniques valeurs mais rien n'apparaît le script me renvoie les valeurs max du code "1" et celle du code "3".
Ma base de donnée est bien plus grande que celle-là et je remarque également un autre problème qui est sûrement lié au reste, dans certains cas au lieu de me renvoyer les deux valeurs max du code "1" le script n'en renvoie qu'une seule.
Est-ce que quelqu'un sait d'où le problème peut venir ?
Merci d'avance et bonne journée !
Lisa