Mensaje de advertencia: En `…`: nivel de factor no válido, NA generado

No entiendo por qué recibí este mensaje de advertencia.

> fixed  fixed[1, ] <- c("lunch", 100) Warning message: In `[ fixed Type Amount 1  100 2 0 3 0 

El mensaje de advertencia se debe a que su variable “Tipo” se convirtió en un factor y “almuerzo” no era un nivel definido. Utilice el stringsAsFactors = FALSE al hacer su dataframe para forzar a “Tipo” a ser un personaje.

 > fixed <- data.frame("Type" = character(3), "Amount" = numeric(3)) > str(fixed) 'data.frame': 3 obs. of 2 variables: $ Type : Factor w/ 1 level "": NA 1 1 $ 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" 

Si está leyendo directamente del archivo CSV, haga esto.

 myDataFrame <- read.csv("path/to/file.csv", header = TRUE, stringsAsFactors = FALSE) 

Aquí hay un enfoque flexible , se puede utilizar en todos los casos, en particular:

  1. afectar solo una columna , o
  2. el dataframe se ha obtenido de la aplicación de operaciones previas (por ejemplo, no abrir un archivo inmediatamente o crear un nuevo dataframe).

Primero, as.character -factorizar una cadena usando la función as.character y, luego, volver a factorizar con la función as.factor (o simplemente factor ):

 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) 

La forma más fácil de solucionar esto es agregar un nuevo factor a su columna. Usa la función de niveles para determinar cuántos factores tienes y luego agrega un nuevo factor.

  > levels(data$Fireplace.Qu) [1] "Ex" "Fa" "Gd" "Po" "TA" > levels(data$Fireplace.Qu) = c("Ex", "Fa", "Gd", "Po", "TA", "None") [1] "Ex" "Fa" "Gd" "Po" " TA" "None"