Pour la Boucle avec if/Else pour créer une nouvelle colonne de la df

0

La question

Je suis étudiant à essayer d'apprendre des R... et que vous avez passé des heures à essayer de comprendre cela, mais ont jusqu'à présent échoué. je vais peut-être sur le mauvais chemin, ou ne savent pas quelque chose de fondamental.

J'ai des données avec le numéro d'étudiant, et le module de résultats - les résultats sont sous forme numérique, et je veux changer le résultat de la grade - A, B, C, etc. J'ai réussi à créer une boucle qui va imprimer le grade, mais ne peut pas comprendre comment le mettre dans le dataframe.

Le jeu de données que j'ai est assez grand, alors j'ai créé quelques données factices pour l'exemple ci-dessous, le code s'exécute, et ne me donne pas toutes les erreurs, mais il ne remplace pas le numéro de la lettre de qualité:

`Result <- c(50,67,89,77,65,66,70,73,69,80)

    for (i in Result){
if (i < 16.67) {
print ("G+")
i <- "G+"
} else if (i < 26.67) {
print ("F+")
 i <- "F+"
} else if (i < 36.67) {
print ("E+")
i <- "E+"
} else if (i < 40) {
print ("D-")
i <- "D+"
}else if (i < 43.33) {
 print ("D")
 i <- "D"
}else if (i < 46.67) {
print ("D+")
i <- "D+" 
}else if (i < 50) {
print ("C-")
i <- "C-"
}else if (i < 53.33) {
print ("D")
i <- "D"
}else if (i < 56.67) {
print ("D+")
i <- "D+"
}else if (i < 60) {
print ("B-")
i <- "B-"
}else if (i < 63.33) {
print ("B")
i <- "B"
}else if (i < 66.67) {
print ("B+")
i <- "B+"
}else if (i < 70) {
print ("A-")
i <- "A-"
}else if (i < 73.33) {
print ("A")
i <- "A"
}else if (i < 100) {
print ("A+")
i <- "A+"
}
}

# result: [1] "D"
[1] "A-"
[1] "A+"
[1] "A+"
[1] "B+"
[1] "B+"
[1] "A"
[1] "A"
[1] "A-"
[1] "A+"`   `


    

Tout conseil serait grandement apprécié. merci beaucoup, El.

for-loop r
2021-11-23 22:26:35
1

La meilleure réponse

2

Mettez votre exemple de données dans un ensemble de données.cadre:

df <- data.frame( result = c(50,67,89,77,65,66,70,73,69,80) )

Ensuite, utilisez cut() pour obtenir des notes dans une nouvelle colonne de données.cadre:

df$grade <- cut(df$result, 
            breaks = c(0, 16.67, 26.67, 36.67, 40, 43.33, 46.67, 50, 53.33, 56.67, 60, 63.33, 66.67, 70, 73.33, 100), 
            labels = c("G+", "F+", "E+", "D-", "D", "D+", "C-", "C", "C+", "B-", "B", "B+", "A-", "A", "A+"))

Imprimer le résultat pour vérifier:

df

   result grade
1      50    C-
2      67    A-
3      89    A+
4      77    A+
5      65    B+
6      66    B+
7      70    A-
8      73     A
9      69    A-
10     80    A+

Notez que (1) il est préférable d'enregistrer les résultats dans un ensemble de données.cadre que de simplement les imprimer, et (2) beaucoup de choses qui peut être fait de mieux/plus vite dans la R si vous n'avez pas de boucle, utilisez plutôt des R vectorisé fonctions (comme cut!).

2021-11-23 22:42:17

Salut DanY, je l'ai juste essayé et cela a fonctionné un rêve! merci beaucoup! Je n'ai jamais vu de coupe() avant - je suppose que j'ai encore beaucoup à apprendre :-) Merci encore et belle soirée.
MsElaineous

Vous êtes les bienvenus. Beaucoup de bonnes ressources gratuites disponibles ici pour vous aider à apprendre: bigbookofr.com/index.html
DanY

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................