1
votes

question simple sur le langage r dans la dénomination

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 !! :)

r

2 commentaires

Votre dernière ligne s'appelle sous-ensemble ou extraction . Vous extrayez les valeurs du vecteur de lettres en l'indexant avec Data . L'instruction names (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.


3 Réponses :


4
votes

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


0 commentaires

1
votes

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.


0 commentaires

2
votes

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


0 commentaires