Takie podejście jest podobne do Ananda, ale używa unlist()
zamiast factor(as.matrix())
. Ponieważ wszystkie kolumny są już czynnikami, unlist()
połączy je w jeden wektor czynnikowy z odpowiednimi poziomami.
Zobaczmy więc, co stanie się, gdy będziemy mieć ramkę danych w postaci unlist()
.
unlist(df, use.names = FALSE)
# [1] a c c b b b b b c a c a
# Levels: a b c
Teraz możemy po prostu uruchomić as.integer()
(lub c()
) w powyższym kodzie, ponieważ wartości całkowite z czynników dopasować żądany mapowanie. W związku z tym poniższe ponownej oceny całej ramce danych.
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
Uwaga:use.names = FALSE
nie jest konieczne. Jednak zrzucenie atrybutu nazw spowoduje, że proces ten będzie bardziej wydajny niż nie.
danych:
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))
jestem ciekaw: jak jest DF1 [] <- ... Różnią się od DF1 <-... myślę, że prowadzą do tego samego wyniku w końcu, ale może różnymi ścieżkami? – atiretoo
@atiretoo Zachowuje strukturę, tak jak w oryginalnym zbiorze danych. – akrun
Aha! Dzięki tak, w szczególności df1 nadal będzie ramką danych – atiretoo