Pentru Bucla cu Dacă/Altceva pentru a crea o nouă coloană într-un df

0

Problema

Eu sunt student încearcă să învețe R... și am petrecut ore întregi încercând să-și seama de acest lucru, dar nu au reușit până acum. poate că am de gând pe un drum greșit, sau nu stiu ceva de bază.

Trebuie date cu numărul de studenți, și modul de rezultate - rezultatele sunt în formă numerică, și vreau pentru a schimba rezultatul la clasa a - a, B, C etc. Am reușit să creeze o buclă care va imprima nota dar nu pot da seama cum să-l pună în dataframe.

Setul de date pe care o am este destul de mare, asa ca am creat niste date fictive pentru exemplul de mai jos, codul se execută, și nu-mi da erori dar nu înlocui numărul cu clasa scrisoare:

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


    

Orice sfat ar fi apreciat foarte mult. multe mulțumiri, El.

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

Cel mai bun răspuns

2

Pune-ti exemplu de date într-un date.cadru:

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

Apoi, utilizați cut() pentru a obține note într-o nouă coloană de date.cadru:

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

Rezultatul de imprimare pentru a verifica:

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+

Observați că (1) este mai bine pentru a salva rezultatele într-un date.cadru decât pur și simplu să le imprimați, și (2) multe lucruri pot fi făcute mai bine/mai repede în R dacă nu buclă; folosi în loc de R e vectorized funcții (cum ar fi cut!).

2021-11-23 22:42:17

Salut DanY, am încercat și a mers un vis! vă mulțumesc atât de mult! N-am văzut cut() înainte de a - cred că încă mai au o mulțime de a învăța :-) Multumesc din nou, și să ai o seară minunată.
MsElaineous

Ești binevenit. O mulțime de bun, resurse gratuite disponibile aici pentru a vă ajuta să învețe: bigbookofr.com/index.html
DanY

În alte limbi

Această pagină este în alte limbi

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