Je suis un débutant en développement en r. J'ai une question simple sur le langage r. Grâce à de nombreux experts de ce site, je m'améliore beaucoup. Je suis toujours reconnaissant pour cela, et tous ceux qui donnent la main avec cette question, merci d’avance.
Voici le code.
Data=c("a","b","c","d","e")[Data]
Je veux nommer chacun des 1,2,3,4,5 à a, b, c, d, e. j'ai donc pensé que je pourrais accomplir cela en utilisant le code supérieur.
Je sais que le bon code est
Data=sample(1:5,size=25,replace=T)
names(Data)=c("a","b","c","d","e")
Mais je ne comprends pas pourquoi c'est le bon code et pourquoi j'ai besoin des dernières [Données] .
Toute aide serait vraiment appréciée !! Merci beaucoup d'avance !! :)
3 Réponses :
Les dernières Données fournissent un index des valeurs de sous-ensembles de c ("a", "b", "c", "d", "e") .
Prenons un exemple simple:
Considérez,
letters #[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" LETTERS # [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
Maintenant, pour obtenir la première valeur dans a , vous pouvez faire
a[Data] #[1] "c" "c" "b" "b" "c" "e" "d" "a" "b" "c" "e" "c" "c" "a" "d" "a" "a" "e" "c" "b" "b" "a" "c" "d" "a"
Pour obtenir la 3e valeur dans a , vous pouvez faire
a <- c("a","b","c","d","e")
set.seed(123)
Data=sample(1:5,size=25,replace=T)
Data
#[1] 3 3 2 2 3 5 4 1 2 3 5 3 3 1 4 1 1 5 3 2 2 1 3 4 1
Pour obtenir la 6e et 8ème valeur dans a que vous pouvez faire
a[c(1, 1, 3)] #[1] 1 1 3
Que se passera-t-il si vous répétez un certain index? Disons que vous sélectionnez 1 deux fois et 3 une fois.
a[c(6, 8)] #[1] 6 8
Comme vous pouvez le voir, la première valeur est sélectionnée deux fois et la troisième une fois.
Maintenant, les données que vous avez servent d'index au sous-ensemble alors que a devient c ("a", "b", " c "," d "," e ")
a[3] #[1] 3
Vous utilisez maintenant ces valeurs Data pour créer un sous-ensemble de a donnant
a[1] #[1] 1
Une note de côté, il y a une constante intégrée lettres et LETTERS qui donne 26 alphabets minuscules et majuscules.
a <- 1:10
En effet, Données contient les numéros que vous souhaitez nommer dans l'ordre dans lequel vous souhaitez les nommer. En ajoutant [Data] à la fin, vous sélectionnez les lettres dans l'ordre Data . Pour comprendre cela, essayez ce que fait c ("a", "b", "c", "d", "e") [c (1, 2)] ; il sélectionne uniquement les deux premières lettres. Si vous tapez à la place c ("a", "b", "c", "d", "e") [c (5, 4)] il sélectionnera les deux dernières lettres, mais dans le sens inverse. Ensuite, si vous n'imprimez que des Données , vous verrez qu'il contient les nombres de 1 à 5, ce qui correspond au nombre de lettres uniques. Il sélectionnera donc les lettres selon cet ordre. Vous pouvez voir que tous les nombres correspondent aux lettres dans l'ordre en imprimant les Données correctement nommées.
L'utilisation de names (Data) = c ("a", "b", "c", "d", "e") ne fonctionne pas correctement car vous ne nommez pas les 25 des nombres, mais plutôt seulement les cinq premiers d'entre eux.
Voici un moyen qui tire parti de la façon dont les objets de la classe "factor" sont codés en interne dans R. Dans R, les facteurs sont codés comme des entiers consécutifs commençant à 1, et ce que voit l'utilisateur est leurs libellés et niveaux , pas les valeurs entières. Mais les valeurs entières ne disparaissent pas, elles sont toujours là.
Commencez par créer un vecteur d'entiers comme dans la question mais en définissant la graine RNG afin de rendre les résultats reproductibles. Ce vecteur est enregistré pour plus tard.
identical(Saved, as.integer(Data)) # [1] TRUE
Maintenant, créez le facteur. Notez que l'attribut des étiquettes est défini sur les lettres "a" à "e" .
as.integer(Data) # [1] 3 3 2 2 3 5 4 1 2 3 5 3 3 1 4 1 1 5 3 2 2 1 3 4 1
Voir la représentation interne .
Data <- factor(Data, labels = c("a","b","c","d","e"))
Data
# [1] c c b b c e d a b c e c c a d a a e c b b a c d a
#Levels: a b c d e
Et comparez avec les valeurs initiales.
set.seed(123) Data <- sample(1:5, size = 25, replace = TRUE) Saved <- Data
Votre dernière ligne s'appelle sous-ensemble ou extraction . Vous extrayez les valeurs du vecteur de lettres en l'indexant avec
Data. L'instructionnames (Data)donne au vecteur numérique un attribut names. Ce sont loin d'être la même chose, pouvez-vous expliquer ce que vous essayez de faire?Tout d'abord merci de m'avoir aidé! J'essayais de changer le nom «1» en «a», «2» en «b», ... comme ça. Je suppose que j'étais confus à propos du vecteur numérique et du vecteur de lettres.