Partage
  • Partager sur Facebook
  • Partager sur Twitter

R vector, array - fill with values

Remplacer les NA par des values

24 octobre 2021 à 22:44:57

Hello,

j'ai une question sur la manière de remplir un vecteur.

Je me forme à R, et voici ce que j'essaie de faire :

1 - je déclare un array de k lignes et 2 colonnes :

my_vec <- array(dim = c(k, 2))

2 - dans une boucle for, je souhaite le remplir de valeurs, récupérées aléatoirement d'une ligne d'un autre array de mon projet :

for(i in 1:k) {  
        temporary <- dataPoints[sample(nrow(dataPoints), 1), ]    
        my_vec <- c(my_vec, assign(paste0("vec", i), temporary))

Je vois qu'il se rempli, mais à la suite de NA au lieu d'écraser les valeurs par défaut !

$my_vec
[1]       NA       NA       NA       NA 3.186594 4.508107 5.294912 4.360108

3 - dans un autre array, je place mon vecteur aux bonnes dimensions :

$recup
     [,1] [,2]
[1,]   NA   NA
[2,]   NA   NA

Quelqu'un sait-il comment faire pour remplacer les NA à l'étape numéro 2 par mes valeurs que je concatène pour l'instant à la suite ?

Merci pour votre aide :)

  • Partager sur Facebook
  • Partager sur Twitter
25 octobre 2021 à 18:47:45

Tout simplement en passant par les indices du vecteur 

my_vec[i,]<-dataPoints[sample(nrow(dataPoints),1),]
ou
my_vec[i,]<-c(15,23)

Ta concaténation doit venir du fait que tu le rajoutes au début du c(my_vec, ...)

Je ne suis pas spécialiste R, mais dans la majorité des langages, on modifie un élément d'un tableau (array, list, vecteur) en accédant à sa position

  • Partager sur Facebook
  • Partager sur Twitter
25 octobre 2021 à 23:19:26

Merci beaucoup umfred,

j'ai pu avancer sur mon projet, voici comment j'ai fait :

1 - je déclare mon vecteur et ma matrice de destination

my_vec = vector() 
my_dest = matrix()

2- j'assigne les valeurs dans le vecteur

for(i in 1:x) {  
        temporary <- dataPoints[sample(nrow(dataPoints), 1), ]     
        my_vec <- c(my_vec, assign(paste0("vec", i), temporary)) 
    } 

3 - je place le vecteur dans la matrice en la remplissant par lignes

my_dest = matrix(data=my_vec, nrow = x, ncol = 2, byrow = TRUE)



Ouf ! Cela m'a prit énormément de temps :)

A présent je butte sur un autre problème :

je cherche à déterminer True si ma colonne est bien celle qui contient les plus petites valeurs par rapport aux autres colonnes de ma matrice :

c(ma_matrice[,z] <= ma_matrice[,-z]) 
# dans une boucle for(z in 1:x)

Je pensais que le [-z] représentait toutes les autres colonnes, sauf la colonne [,z] mais je dois mal m'y prendre.

Voici un petit algorithme auquel je pense, pour essayer de résumer la chose :

# trouver la liste 1 à x sans Z
# Si : la colonne Z est plus petite que les colonnes de la liste (avec Z non inclus)
# return true dans mon vecteur logique

Auriez-vous une idée pour m'aider ? Merci encore,

bonne journée

edit : j'ai fait une boucle dans une boucle, pour tester toutes les colonnes avec toutes les colonnes :)

-
Edité par ElieL. 26 octobre 2021 à 11:21:05

  • Partager sur Facebook
  • Partager sur Twitter
26 octobre 2021 à 12:20:38

c'est bien ça pourtant, mais ça te renvoie un vecteur/matrice qui t'indique individuellement la comparaison (fait des affichages de tes vecteurs/matrices et de ton test)

k<-5
l<-4
# dièse construction matrice
mv <- array(dim = c(k, l))
for(i in 1:k){
    for(j in 1:l){
        mv[i,j]<-i+j
    }
}
#tests et affichages
z<-2
print(mv[,z]) # affichage de la colonne choisie
print(mv[,-z]) # affichage de la matrice sans la colonne choisie
print(mv[,z]<=mv[,-z]) # affichage du résultat du test

#résultat des affichages
#> print(mv[,z])
#[1] 3 4 5 6 7
#> print(mv[,-z])
#     [,1] [,2] [,3]
#[1,]    2    4    5
#[2,]    3    5    6
#[3,]    4    6    7
#[4,]    5    7    8
#[5,]    6    8    9
#> print(mv[,z]<=mv[,-z])
#      [,1] [,2] [,3]
#[1,] FALSE TRUE TRUE
#[2,] FALSE TRUE TRUE
#[3,] FALSE TRUE TRUE
#[4,] FALSE TRUE TRUE
#[5,] FALSE TRUE TRUE



  • Partager sur Facebook
  • Partager sur Twitter
31 octobre 2021 à 13:39:31

merci beaucoup pour ta réponse, pour l'instant je vais rester sur le vecteur individuel si çà marche, car je m'en sers de suite pour un autre calcul !

Que je stocke dans un autre vecteur. Je ne vais pas afficher les résultats ainsi pour ce projet :)

Bonne journée !

  • Partager sur Facebook
  • Partager sur Twitter