Mensaje de advertencia: En `...`: nivel de factor no válido, se generó NA

Resuelto ihm asked hace 54 años • 5 respuestas

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

> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3))
> fixed[1, ] <- c("lunch", 100)
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "lunch") :
  invalid factor level, NA generated
> fixed
  Type Amount
1 <NA>    100
2           0
3           0
ihm avatar Jan 01 '70 08:01 ihm
Aceptado

El mensaje de advertencia se debe a que su variable "Tipo" se convirtió en un factor y "almuerzo" no era un nivel definido. Utilice la stringsAsFactors = FALSEbandera al crear su marco de datos para forzar que "Tipo" sea un carácter.

> 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"
David avatar May 29 '2013 17:05 David

Si está leyendo directamente desde un archivo CSV, haga lo siguiente.

myDataFrame <- read.csv("path/to/file.csv", header = TRUE, stringsAsFactors = FALSE)
Chirag avatar Mar 04 '2016 08:03 Chirag

He aquí un enfoque flexible que se puede utilizar en todos los casos, en particular:

  1. para afectar solo una columna , o
  2. se dataframeha obtenido aplicando operaciones anteriores (por ejemplo, no abrir inmediatamente un archivo o crear un nuevo marco de datos).

Primero, desfactorice una cadena usando la as.characterfunción y, luego, vuelva 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)
toto_tico avatar Aug 02 '2016 16:08 toto_tico