Dieser Ansatz zu Anandas ähnlich ist, verwendet aber unlist()
statt factor(as.matrix())
. Da alle Ihre Spalten bereits Faktoren sind, werden unlist()
sie in einem Faktorvektor mit den entsprechenden Ebenen kombinieren.
Lassen Sie uns einen Blick darauf werfen, was passiert, wenn wir unlist()
Ihren Datenrahmen.
unlist(df, use.names = FALSE)
# [1] a c c b b b b b c a c a
# Levels: a b c
Jetzt können wir einfach as.integer()
(oder c()
) auf dem obigen Code ausgeführt werden, da die ganzzahligen Werte der Faktoren, die Ihre gewünschte Abbildung entsprechen. Und so wertet der folgende Code Ihren gesamten Datenrahmen auf.
df[] <- as.integer(unlist(df, use.names = FALSE))
## note that you can also just drop the factor class with c()
## df[] <- c(unlist(df, use.names = FALSE))
df
# V1 V2 V3
# 1 1 2 3
# 2 3 2 1
# 3 3 2 3
# 4 2 2 1
Hinweis:use.names = FALSE
ist nicht erforderlich. Durch das Löschen des Namensattributs wird dieser Prozess jedoch effizienter.
Daten:
df <- structure(list(V1 = structure(c(1L, 3L, 3L, 2L), .Label = c("a",
"b", "c"), class = "factor"), V2 = structure(c(1L, 1L, 1L, 1L
), .Label = "b", class = "factor"), V3 = structure(c(2L, 1L,
2L, 1L), .Label = c("a", "c"), class = "factor")), .Names = c("V1",
"V2", "V3"), class = "data.frame", row.names = c(NA, -4L))
Ich bin neugierig: Wie DF1 [] <- ... Differ von df1 <-... Ich denke, sie zum gleichen Ergebnis führen am Ende aber vielleicht auf verschiedenen Wegen? – atiretoo
@atiretoo Er behält die Struktur wie im ursprünglichen Datensatz bei. – akrun
Aha! Danke ja insbesondere df1 wird immer noch ein Datenrahmen sein – atiretoo