Question Comment changer les étiquettes de facteur en chaîne dans un bloc de données


J'ai le bloc de données suivant:

    name1  name2
        A      B
        B      D
        C      C
        D      A

les colonnes "name1" et "name2" sont traitées comme des facteurs et donc A, B, C et D sont traités comme des niveaux. Cependant, je veux en quelque sorte convertir ce bloc de données pour qu'il devienne

    name1  name2
      "A"    "B"
      "B"    "D"
      "C"    "C"
      "D"    "A"

En d'autres termes, convertissez-le de manière à ce que A, B, C et D soient traités comme une chaîne.

Comment puis je faire ça?


10
2017-10-06 02:16


origine


Réponses:


vous cherchez as.character, que vous devez appliquer à chaque colonne du data.frame

En supposant X est votre data.frame
Si fctr.cols sont les noms de vos colonnes factorielles, alors vous pouvez utiliser:

 X[, fctr.cols] <- sapply(X[, fctr.cols], as.character)

Vous pouvez collecter vos colonnes factorielles en utilisant is.factor:

 fctr.cols <- sapply(X, is.factor)

18
2017-10-06 02:21



Cela peut être un peu plus simple que la réponse ci-dessus.

#where your dataframe = df
df.name1 <- as.character (df.name1)
df.name2 <- as.character (df.name2)

Je dois faire des choses comme ça tout le temps au travail parce que les données sont tellement désordonnées. J'ai été capable de le faire à l'importation avec StringsAsFactors = FALSE, mais dans la dernière version de r je reçois une erreur sur read.csv. Idéalement, je le comprendrai bientôt… Entre-temps, je le fais comme une méthode rapide et efficace. Il prend l'ancienne variable, foo, qui est le type de facteur, et le convertit en une nouvelle variable, fooChar, qui est le type de caractère. Je le fais généralement in situ en nommant la nouvelle variable de la même façon que l'ancienne, mais vous voudrez peut-être en jouer avant de lui faire confiance pour remplacer des valeurs.

#Convert from Factor to Char
#Data frame named data
#Old Variable named foo, factor type
#New Variable named fooChar, character type

data$fooChar <-as.character(data$foo)

#confirm the data looks the same:
table (data$fooChar)

#confirm structure of new variable
str(data)

1
2018-01-04 15:51