Mensaje de advertencia: En `...`: nivel de factor no válido, se generó NA
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
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 = FALSE
bandera 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"
Si está leyendo directamente desde un archivo CSV, haga lo siguiente.
myDataFrame <- read.csv("path/to/file.csv", header = TRUE, stringsAsFactors = FALSE)
He aquí un enfoque flexible que se puede utilizar en todos los casos, en particular:
- para afectar solo una columna , o
- se
dataframe
ha 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.character
funció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)