Pro Smyčku s if/Else vytvořit nový sloupec v df

0

Otázka

Jsem student snaží naučit R a strávili hodiny se snaží přijít na to ale zatím nepodařilo. možná jdu na to špatně, nebo nevím, něco základního.

Mám data číslo studenta, a modul výsledky - výsledky jsou v číselné podobě, a to chci změnit výsledek do třídy - A, B, C atd. Podařilo se mi vytvořit smyčku, která bude tisknout třídy, ale nemůžu přijít na to, jak to v datovém.

Dataset mám je docela velký, takže jsem vytvořil nějaké fiktivní údaje pro níže uvedený příklad, kód běží, a nedává mi žádné chyby, ale to neznamená, nahradit číslo s písmenem třídy:

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


    

Nějakou radu by bylo velmi ocenil. díky moc, El.

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

Nejlepší odpověď

2

Dát váš příklad dat v data.rám:

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

Pak použijte cut() získat známky v novém sloupci údajů.rám:

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

Vytisknout výsledek pro kontrolu:

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+

Všimněte si, že (1) to je lepší, aby uložit výsledky do data.rám, než aby jednoduše vytisknout, a (2) mnoho věcí, které lze udělat lépe/rychleji v R, pokud nechcete smyčku; místo toho používat R je vektorizována funkcí (jako cut!).

2021-11-23 22:42:17

Ahoj DanY, jen jsem to zkusil a fungovalo to sen! děkuji moc! Nikdy jsem neviděl cut() před - myslím, že se stále mám hodně co učit :-) ještě jednou Díky a přeji krásný večer.
MsElaineous

Nemáš zač. Hodně dobrý, volné zdroje k dispozici zde, aby vám pomůže naučit: bigbookofr.com/index.html
DanY

V jiných jazycích

Tato stránka je v jiných jazycích

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