Remplir un array avec une boucle

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

Diane MANZON
Messages : 56
Enregistré le : 18 Juin 2018, 08:31

Remplir un array avec une boucle

Messagepar Diane MANZON » 07 Déc 2018, 15:34

Bonjour à tous,

Je n'arrive pas à remplir mon array comme il faut.
Je pars d'une matrice (data) et je voudrais générer 50 matrices de façon aléatoire.

Code : Tout sélectionner

data <- matrix(rnorm(56), nrow=14, ncol=4) #matrice de départ
B = 50 # nombre final de matrices
nb_alea = NULL
BS = array(numeric(), c(nrow(data), ncol(data), B)) #array qui va contenir toutes mes matrices

for (i in 1:B) {
  nb_alea=sample(nrow(data), 14, T) # je choisis aléatoirement avec remise les lignes de la nouvelle matrice
  BS = array(data[nb_alea,], c(nrow(data), ncol(data), B))
}


Seulement avec ce code, j'ai la même matrice 50 fois… Quelqu'un aurait une idée ?
Ensuite, je voudrais pouvoir utiliser mes matrices individuellement mais je ne trouve pas la commande qui permet de passer d'un array à une matrice…

Je vous remercie d'avance pour votre aide !
Cordialement,
Diane MANZON

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

Re: Remplir un array avec une boucle

Messagepar Pierre-Yves Berrard » 07 Déc 2018, 16:09

Bonjour,
Diane MANZON a écrit :Seulement avec ce code, j'ai la même matrice 50 fois… Quelqu'un aurait une idée ?

À première vue, je dirais que c'est parce que vous faites une boucle sur i et que i n'apparaît jamais à l'intérieur de la boucle.

Remplacer la dernière ligne par :

Code : Tout sélectionner

BS[ , , i] <- array(data[nb_alea,], c(nrow(data), ncol(data)))

Ça répond aussi à la deuxième question, il me semble.
PY

Diane MANZON
Messages : 56
Enregistré le : 18 Juin 2018, 08:31

Re: Remplir un array avec une boucle

Messagepar Diane MANZON » 10 Déc 2018, 08:13

Pierre-Yves Berrard a écrit :Bonjour,
À première vue, je dirais que c'est parce que vous faites une boucle sur i et que i n'apparaît jamais à l'intérieur de la boucle.
Remplacer la dernière ligne par :

Code : Tout sélectionner

BS[ , , i] <- array(data[nb_alea,], c(nrow(data), ncol(data)))

Ça répond aussi à la deuxième question, il me semble.


Bonjour,

Décidément, les boucles ce n'est pas mon truc!
Super merci beaucoup !!

Jean Baptiste Yannick SAMBOU
Messages : 2
Enregistré le : 11 Déc 2018, 12:48

Remplir des valeurs manquantes

Messagepar Jean Baptiste Yannick SAMBOU » 12 Déc 2018, 16:41

Bonjour,
je cherche une instruction (boucle par exemple) qui me permettra de remplacer les valeurs manquantes (NA) par la dernière valeur numérique qui les précède.
Par exemple:
A<-c(1,NA,NA,3,NA,NA,5) , le résultat attendu dans A est : A= c(1,1,1,3,3,3,5).
ou

Code : Tout sélectionner

> dt
# A tibble: 7 x 3
   jour  mois année
  <dbl> <dbl> <dbl>
1     1     1  2004
2    NA    NA    NA
3    NA    NA    NA
4     3     2  2004
5    NA    NA    NA
6    NA    NA    NA
7    18    11  2005

J'ai utilisé cette boucle ci dessous:

Code : Tout sélectionner

njour<-length(jour)
n.jour<-njour -1
for(i in 2:n.jour)
{
  while(is.na((dt$jour[i])) {
    dt$jour[i]<-dt$jour[i-1]
  }
}


Je vous remercie d'avance pour votre aide !
Cordialement,
Jean Baptiste Yannick SAMBOU

jean lobry
Messages : 733
Enregistré le : 17 Jan 2008, 20:00
Contact :

Re: Remplir un array avec une boucle

Messagepar jean lobry » 12 Déc 2018, 17:39

Bonjour Jean Baptiste Yannick,

je t'invite à re-poster ta question, qui me semble a priori bien formulée et parfaitement en adéquation avec ce forum, en tant que nouveau fil de discussion et non comme une réponse à un sujet pré-existant. En l'état elle risque de passer sous le radar des généreux contributeurs d'icelui.

C'est une question intéressante, n'hésite pas !

Bien amicalement,

jean

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Remplir un array avec une boucle

Messagepar Logez Maxime » 12 Déc 2018, 22:25

Bonjour,

avec les packages dplyr et tidyr ça donne ça :

Code : Tout sélectionner

fill(dt, everything()) #dt %>% fill(everything())
Cordialement,
Maxime

Jean Baptiste Yannick SAMBOU
Messages : 2
Enregistré le : 11 Déc 2018, 12:48

Re: Remplir un array avec une boucle

Messagepar Jean Baptiste Yannick SAMBOU » 13 Déc 2018, 00:54

Bonjour Jean Lobry et Logez Maxime,

mon problème a été résolu par le code suggéré par Logez Maxime.
Je tâcherai de suivre votre conseil Jean Lobry pour une prochaine publication.
Merci à vous.
Cordialement,
Jean Baptiste


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron