Ich möchte eine IF-Anweisung auf mehrere Spalten anwenden (im Wesentlichen einen ganzen Datenrahmen) und nehme den Ansatz, eine Funktion dafür zu erstellen. Ziel ist es, die Daten in den Spalten durch eine Zahl zu ersetzen, die die Gruppe darstellt, in die die Nummer fällt.Funktion mit einer IF-Anweisung, die auf mehrere Spalten angewendet werden soll
Die Datenprobe sieht aus, als solche:
> Mat
A B C D E
E1 8.45 6.65 7.35 5.18 3.11
E2 12.59 4.18 4.08 0.95 1.75
E3 15.93 3.05 1.81 2.77 4.42
E4 15.93 3.05 1.81 2.77 4.42
E5 11.57 4.48 4.70 2.01 1.08
E6 8.17 7.05 7.70 5.38 3.45
E7 11.57 4.48 4.70 2.01 1.08
E8 9.49 5.41 6.51 5.78 3.20
E9 11.71 4.40 4.58 1.87 1.11
E10 9.52 5.49 6.63 6.07 3.49
Die Funktion habe ich versucht, eine IF-Anweisung zu erstellen nehmen und in einer Spalte bei jedem Wert aussehen und je nach dem Wert ersetzen sie durch eine Gruppennummer von 1 bis 6 (für Zahlen zwischen 1 und 10) und NA
für Zahlen größer als 10. Die IF-Anweisung selbst funktionierte, wenn ich sie manuell für EINE Spalte schreibe. Die Funktion, die ich geschrieben habe, ist als solche (so genannte Gruppierung):
# write user function to apply the loop
Grouping = function(data) {
for(i in 1:length(x)) {
if(x[i] < 1) {
x[i] = 1
} else if (x[i] < 3) {
x[i] = 3
} else if (x[i] < 4) {
x[i] = 4
} else if (x[i] < 5) {
x[i] = 5
} else if (x[i] < 10) {
x[i] = 6
} else
x[i] = "NA"
}
}
Als ich versuchte apply
mit der Funktion war mein Fehler zu verwenden:
> apply(Mat, 1, Grouping)
Error in FUN(newX[, i], ...) : object 'x' not found
Offensichtlich ist das Problem in meinem Aufbau der Benutzerfunktion aber ich bin mir nicht sicher, wo ich falsch gelaufen bin, da ich ziemlich neu in der Funktionserstellung bin.
Jede Hilfe wird geschätzt!
Danke!
'for (i in 1: Länge (x))' verursacht dies: 'Fehler bei FUN (newX [, i], ...): Objekt 'x' nicht gefunden '. – nrussell
Es sieht so aus, als ob Ihre Funktion 'Grouping()' nicht weiß, was 'x' ist. Dies liegt daran, dass Sie beim Definieren der Funktion den Parameter 'data' der Funktion angeben. Ändere das zu 'x' und du solltest alles einstellen. – paulstey
Macht Sinn, danke! – Qaribbean