Oplossing in r: ongeldig factorniveau, na gegenereerd
Een waarschuwingsbericht dat u kunt tegenkomen bij het gebruik van R is:
Warning message: In `[<-.factor`(`*tmp*`, iseq, value = "C"): invalid factor level, NA generated
Deze waarschuwing treedt op wanneer u probeert een waarde toe te voegen aan een factorvariabele in R die nog niet als gedefinieerd niveau bestaat.
Het volgende voorbeeld laat zien hoe u in de praktijk op deze waarschuwing kunt reageren.
Hoe de waarschuwing te reproduceren
Stel dat we het volgende dataframe in R hebben:
#create data frame
df <- data. frame (team=factor(c('A', 'A', 'B', 'B', 'B')),
dots=c(99, 90, 86, 88, 95))
#view data frame
df
team points
1 to 99
2 to 90
3 B 86
4 B 88
5 B 95
#view structure of data frame
str(df)
'data.frame': 5 obs. of 2 variables:
$ team: Factor w/ 2 levels "A","B": 1 1 2 2 2
$ points: num 99 90 86 88 95
We zien dat de teamvariabele een factor is met twee niveaus: ‘A’ en ‘B’
Stel nu dat we proberen een nieuwe regel toe te voegen aan het einde van het dataframe met de waarde „C“ voor team :
#add new row to end of data frame
df[nrow(df) + 1,] = c('C', 100)
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "C"):
invalid factor level, NA generated
We ontvangen een waarschuwingsbericht omdat de waarde „C“ nog niet bestaat als factorniveau voor de teamvariabele .
Het is belangrijk op te merken dat dit slechts een waarschuwingsbericht is en dat R nog steeds de nieuwe regel aan het einde van het dataframe zal toevoegen, maar de NA- waarde zal gebruiken in plaats van ‚C‘:
#view updated data frame
df
team points
1 to 99
2 to 90
3 B 86
4 B 88
5 B 95
6 NA 100
Hoe de waarschuwing te vermijden
Om de waarschuwing voor een ongeldig factorniveau te voorkomen, moeten we de factorvariabele eerst naar een tekenvariabele converteren, en vervolgens kunnen we deze weer naar een factorvariabele converteren nadat we de nieuwe regel hebben toegevoegd:
#convert team variable to character
df$team <- as. character (df$team)
#add new row to end of data frame
df[nrow(df) + 1,] = c('C', 100)
#convert team variable back to factor
df$team <- as. factor (df$team)
#view updated data frame
df
team points
1 to 99
2 to 90
3 B 86
4 B 88
5 B 95
6 C 100
Merk op dat we erin slagen om met succes een nieuwe regel aan het einde van het dataframe toe te voegen en een waarschuwingsbericht te vermijden.
We kunnen ook verifiëren dat de waarde “C” als factorniveau aan de teamvariabele is toegevoegd:
#view structure of updated data frame
str(df)
'data.frame': 6 obs. of 2 variables:
$ team: Factor w/ 3 levels "A","B","C": 1 1 2 2 2 3
$points: chr "99" "90" "86" "88" ...
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in R kunt oplossen:
Hoe op te lossen in R: argumenten hebben betrekking op een verschillend aantal regels
Hoe op te lossen in R: fout bij het selecteren van ongebruikte argumenten
Hoe te repareren in R: vervanging heeft een lengte van nul