Waarschuwing: In ` `: ongeldig factorniveau, NA gegenereerd

Ik begrijp niet waarom ik dit waarschuwingsbericht heb gekregen.

> 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

Antwoord 1, autoriteit 100%

Het waarschuwingsbericht is omdat uw “Type”-variabele een factor is gemaakt en “lunch” geen gedefinieerd niveau was. Gebruik de vlag stringsAsFactors = FALSE bij het maken van uw dataframe om “Type” te dwingen een teken te zijn.

> 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"

Antwoord 2, autoriteit 22%

Als u rechtstreeks uit een CSV-bestand leest, doe dan als volgt.

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

Antwoord 3, autoriteit 12%

Hier is een flexibele aanpak, deze kan in alle gevallen worden gebruikt, in het bijzonder:

  1. om slechts één kolom te beïnvloeden, of
  2. het dataframe is verkregen door eerdere bewerkingen toe te passen (bijv. niet onmiddellijk een bestand openen of het maken van een nieuw dataframe).

Eerst, ontbind een string met de functie as.character, en refactoriseer met de as.factor (of gewoon factor) functie:

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)

Antwoord 4, autoriteit 3%

De eenvoudigste manier om dit op te lossen, is door een nieuwe factor aan uw kolom toe te voegen. Gebruik de functie niveaus om te bepalen hoeveel factoren u heeft en voeg vervolgens een nieuwe factor toe.

    > 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"

Antwoord 5

Ik heb een soortgelijk probleem met het ophalen van gegevens uit het .xlsx-bestand. Helaas kon ik hier niet het juiste antwoord vinden. Ik heb het alleen afgehandeld met dplyr zoals hieronder, wat anderen kan helpen:

#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"

Ik kon het echter niet aan met het readxl-pakket dat wel geen vergelijkbare parameter hebben als de stringsAsFactors. Om die reden ben ik overgestapt op het pakket xlsx.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

18 − ten =

Other episodes