Le message d'avertissement est dû au fait que votre variable «Type» a été définie comme un facteur et que «déjeuner» n'était pas un niveau défini. Utilisez le stringsAsFactors = FALSEdrapeau lors de la création de votre bloc de données pour forcer "Type" à être un caractère.
> fixed <- data.frame("Type"= character(3),"Amount"= numeric(3))> str(fixed)'data.frame':3 obs. of 2 variables:$ Type : Factor w/1 level "":NA11$ Amount: chr "100""0""0">> fixed <- data.frame("Type"= character(3),"Amount"= numeric(3),stringsAsFactors=FALSE)> fixed[1,]<- c("lunch",100)> str(fixed)'data.frame':3 obs. of 2 variables:$ Type : chr "lunch"""""$ Amount: chr "100""0""0"
Parce que c'est le paramètre par défaut dans la data.frame()fonction (et c'est par défaut car c'est ce que la plupart des utilisateurs veulent la grande majorité du temps).
David
46
Si vous lisez directement à partir d'un fichier CSV, procédez comme suit.
stringAsFactors lance une erreur: argument non utilisé (stringAsFactors = FALSE)
Coliban
1
stringsAsFactors- stringsdoit être pluriel (@Coliban)
campeterson
24
Voici une approche flexible , elle peut être utilisée dans tous les cas, notamment:
à affecter une seule colonne , ou
le dataframea été obtenu à partir de l' application d' opérations précédentes (par exemple de ne pas ouvrir immédiatement un fichier , ou la création d' une nouvelle trame de données).
Tout d'abord, dé-factorisez une chaîne à l'aide de la as.characterfonction, puis re-factorisez avec la as.factor(ou simplement factor) fonction:
fixed <- data.frame("Type"= character(3),"Amount"= numeric(3))# Un-factorize (as.numeric can be use for numeric values)# (as.vector can be use for objects - not tested)
fixed$Type <- as.character(fixed$Type)
fixed[1,]<- c("lunch",100)# Re-factorize with the as.factor function or simple factor(fixed$Type)
fixed$Type <- as.factor(fixed$Type)
Le moyen le plus simple de résoudre ce problème consiste à ajouter un nouveau facteur à votre colonne. Utilisez la fonction de niveaux pour déterminer le nombre de facteurs dont vous disposez, puis ajoutez un nouveau facteur.
J'ai un problème similaire concernant les données extraites du fichier .xlsx. Malheureusement, je n'ai pas pu trouver la bonne réponse ici. Je l'ai géré moi-même avec dplyr comme ci-dessous, ce qui pourrait aider les autres:
#install.packages("xlsx")
library(xlsx)
extracted_df <- read.xlsx("test.xlsx", sheetName='Sheet1', stringsAsFactors=FALSE)# Replace all NAs in a data frame with "G" character
extracted_df[is.na(extracted_df)]<-"G"
Cependant, je ne pouvais pas le gérer avec le readxlpackage qui n'a pas de paramètre similaire au stringsAsFactors. Pour la raison, je suis passé au xlsxpackage.
data.frame()
fonction (et c'est par défaut car c'est ce que la plupart des utilisateurs veulent la grande majorité du temps).Si vous lisez directement à partir d'un fichier CSV, procédez comme suit.
la source
stringsAsFactors
-strings
doit être pluriel (@Coliban)Voici une approche flexible , elle peut être utilisée dans tous les cas, notamment:
dataframe
a été obtenu à partir de l' application d' opérations précédentes (par exemple de ne pas ouvrir immédiatement un fichier , ou la création d' une nouvelle trame de données).Tout d'abord, dé-factorisez une chaîne à l'aide de la
as.character
fonction, puis re-factorisez avec laas.factor
(ou simplementfactor
) fonction:la source
Le moyen le plus simple de résoudre ce problème consiste à ajouter un nouveau facteur à votre colonne. Utilisez la fonction de niveaux pour déterminer le nombre de facteurs dont vous disposez, puis ajoutez un nouveau facteur.
la source
J'ai un problème similaire concernant les données extraites du fichier .xlsx. Malheureusement, je n'ai pas pu trouver la bonne réponse ici. Je l'ai géré moi-même avec dplyr comme ci-dessous, ce qui pourrait aider les autres:
Cependant, je ne pouvais pas le gérer avec le
readxl
package qui n'a pas de paramètre similaire austringsAsFactors
. Pour la raison, je suis passé auxlsx
package.la source