Bucle For con If/Else para crear una nueva columna en el df

0

Pregunta

Soy estudiante tratando de aprender R... y han pasado horas tratando de entender esto, pero han fracasado hasta la fecha. tal vez voy acerca de la manera equivocada, o no sabes algo básico.

He de datos con número de estudiante, y el módulo de resultados - los resultados en forma numérica, y quiero cambiar el resultado para los de grado a, B, C, etc. Me las he arreglado para crear un bucle que se va a imprimir el grado, pero no puede averiguar cómo ponerlo en el dataframe.

El conjunto de datos que tengo es muy grande, así que he creado algunos datos ficticios para que el ejemplo a continuación, se ejecuta el código, y no me da ningún error pero no lo sustituye el número con la letra de grado:

`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+"`   `


    

Cualquier consejo sería muy apreciada. muchas gracias, El.

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

Mejor respuesta

2

Pon tus datos de ejemplo en una de datos.marco:

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

A continuación, utilice cut() para obtener las calificaciones en una nueva columna de datos.marco:

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+"))

Imprimir el resultado para comprobar:

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+

Observe que (1) es mejor guardar los resultados en una base de datos.marco que simplemente la impresión de ellos, y (2) muchas cosas se pueden hacer mejor/más rápido en R si no bucle; en lugar de utilizar R vectorizados funciones (como la cut!).

2021-11-23 22:42:17

Hola DanY, yo sólo lo probé y funcionó un sueño! muchas gracias! Nunca he visto a cortar() antes - supongo que todavía tengo mucho que aprender :-) Gracias de nuevo, y tiene una hermosa noche.
MsElaineous

Eres bienvenido. Un montón de buena, recursos gratuitos disponibles aquí para ayudarle a aprender: bigbookofr.com/index.html
DanY

En otros idiomas

Esta página está en otros idiomas

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