Kürzere Methode zum Ersetzen von Einträgen in R [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Werte in mehreren Spalten eines Datenrahmens mithilfe einer Nachschlagetabelle ändern 2 Antworten

Ich habe vor kurzem angefangen, R zu lernen. Hier ist die Quelldatei, mit der ich arbeite https: //github.com/cosname/art-r-translation/blob/master/data/Grades.tx). Gibt es überhaupt eine Möglichkeit, die Briefnote von zB A auf 4.0, A- auf 3.7 usw. zu ändern, ohne die Schleife zu verwenden?

Ich frage, denn wenn es 1 Million Einträge gäbe, ist die "for" -Schleife möglicherweise nicht die effizienteste Methode, um die Daten zu ändern. Ich würde mich über jede Hilfe freuen.

Da ich auf einem der Poster aufgefordert wurde, meinen Code zu posten, überlegte ich, die for-Schleife auszuführen, um zu prüfen, ob ich dazu in der Lage bin. Hier ist mein Code:

mygrades<-read.table("grades.txt",header = TRUE)

i <- for (i in 1:nrow(mygrades))
{
  #print(i)  
  #for now, see whether As get replaced with 4.0.
  if(mygrades[i,1]=="A")
  {
    mygrades[i,1]=4.0
  }
  else if (mygrades[i,2]=="A")
  {
    mygrades[i,2]=4.0
  }
  else if (mygrades[i,3]=="A")
  {
    mygrades[i,3]=4.0
  }
  else
  {
    #do nothing...continues
  }

}

write.table(mygrades,"newgrades.txt")

Die Ausgabe ist jedoch etwas seltsam. Für einige "A" bekomme ich NA und andere bleiben wie sie sind. Kann mir bitte jemand mit diesem Code helfen?

listaire, ich habe Hadleys Nachschlagetabelle ausprobiert und es funktioniert. Ich habe mir auch Dplyr-Code angesehen, und er funktioniert gut. Aus Gründen meines Verständnisses versuche ich jedoch immer noch, for-Schleifen zu verwenden. Bitte beachten Sie, dass es ungefähr zwei Tage her ist, seit ich ein R-Buch geöffnet habe. Hier ist der geänderte Code.

#there was one mistake in my code: I didn't use stringsAsFactors=False.
#now, this code doesn't work for all "A"s. It spits out 4.0 for some As, and #doesn't do so for others. Why would that be?

mygrades<-read.table("grades.txt",header = TRUE,stringsAsFactors=FALSE)

i <- for (i in 1:nrow(mygrades))
{
  #print(i)  
  if(mygrades[i,1]=="A")
  {
    mygrades[i,1]=4.0
  }
  else if (mygrades[i,2]=="A")
  {
    mygrades[i,2]=4.0
  }
  else if (mygrades[i,3]=="A")
  {
    mygrades[i,3]=4.0
  }
  else
  {
    #do nothing...continues
  }

}

write.table(mygrades,"newgrades.txt")

Die Ausgabe ist:

"final_exam" "quiz_avg" "homework_avg"
"1" "C" "4" "A"
"2" "C-" "B-" "4"
"3" "D+" "B+" "4"
"4" "B+" "B+" "4"
"5" "F" "B+" "4"
"6" "B" "A-" "4"
"7" "D+" "B+" "A-"
"8" "D" "A-" "4"
"9" "F" "B+" "4"
"10" "4" "C-" "B+"
"11" "A+" "4" "A"
"12" "A-" "4" "A"
"13" "B" "4" "A"
"14" "D-" "A-" "4"
"15" "A+" "4" "A"
"16" "B" "A-" "4"
"17" "F" "D" "A-"
"18" "B" "4" "A"
"19" "B" "B+" "4"
"20" "A+" "A-" "4"
"21" "4" "A" "A"
"22" "B" "B+" "4"
"23" "D" "B+" "4"
"24" "A-" "A-" "4"
"25" "F" "4" "A"
"26" "B+" "B+" "4"
"27" "A-" "B+" "4"
"28" "A+" "4" "A"
"29" "4" "A-" "A"
"30" "A+" "A-" "4"
"31" "4" "B+" "A-"
"32" "B+" "B+" "4"
"33" "C" "4" "A"

Wie Sie in der ersten Zeile sehen können, wurde das erste A als 4 umkodiert, das zweite A wurde jedoch nicht umkodiert. Irgendeine Idee, warum das passiert?

Danke im Voraus