Para Loop com If/Else para criar uma nova coluna no df

0

Pergunta

Eu sou estudante de tentar aprender o R... e passaram horas tentando descobrir isso, mas até agora não. talvez eu vou sobre isso da maneira errada, ou que não sabe algo básico.

Eu tenho de dados com o número de aluno, e o módulo de resultados - os resultados são em formato numérico, e eu quero mudar o resultado para a classe - A, B, C etc. Eu consegui criar um loop que irá imprimir o grau, mas não consegue descobrir como colocá-lo no dataframe.

O conjunto de dados que eu tenho é muito grande, então eu criei alguns dados fictícios para o exemplo abaixo, o código é executado, e não me dá qualquer erros, mas não substitua o número da classe da letra:

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


    

Qualquer conselho seria muito apreciada. muito obrigado, El.

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

Melhor resposta

2

Colocar seus dados de exemplo numa base de dados.quadro:

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

Em seguida, use cut() para obter as notas em uma nova coluna de dados.quadro:

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 o resultado para verificar:

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) é melhor salvar os resultados em um banco.quadro do que simplesmente imprimi-los, e (2) muitas coisas podem ser melhor/mais rápido em R se você não loop; em vez disso, usar R vetorizados funções (como cut!).

2021-11-23 22:42:17

Oi DanY, eu apenas tentei isso e funcionou um sonho! muito obrigado! Eu nunca vi cut() antes - eu acho que eu ainda tenho muito para aprender :-) Obrigado mais uma vez, e ter uma bela noite.
MsElaineous

Você é bem-vindo. Muito bom, recursos gratuitos disponíveis aqui para ajudá-lo a aprender: bigbookofr.com/index.html
DanY

Em outros idiomas

Esta página está em outros idiomas

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