Hoe op te lossen in r: ontbrekende waarden zijn niet toegestaan in subscripttoewijzingen
Een foutmelding die u kunt tegenkomen bij het gebruik van R is:
Error in `[<-.data.frame`(`*tmp*`, df$A == 5, , value = list(A = c(NA, : missing values are not allowed in subscripted assignments of data frames
Deze fout treedt meestal op wanneer u probeert waarden in de ene kolom toe te wijzen met behulp van waarden uit een andere kolom, maar er zijn NA- waarden aanwezig.
Het volgende voorbeeld laat zien hoe u deze fout in de praktijk kunt oplossen.
Hoe de fout te reproduceren
Stel dat we het volgende dataframe in R creëren:
#create data frame
df <- data. frame (A=c(3, 4, 4, NA, 5, 8, 5, 9),
B=c(12, 13, 7, 7, 12, 11, 15, 7))
#view data frame
df
AB
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 12
6 8 11
7 5 15
8 9 7
Stel nu dat we proberen een waarde van 10 toe te kennen aan elke rij in kolom B, waarbij de overeenkomstige waarde in kolom A 5 is:
#attempt to assign column B a value of 10 where A is equal to 5
df[df$A == 5, ]$B <- 10
Error in `[<-.data.frame`(`*tmp*`, df$A == 5, , value = list(A = c(NA, :
missing values are not allowed in subscripted assignments of data frames
We krijgen een foutmelding omdat er NA-waarden in kolom A staan en de foutmelding vertelt ons expliciet dat ontbrekende waarden niet zijn toegestaan in subscripttoewijzingen van dataframes .
Hoe u de fout kunt vermijden
Er zijn twee manieren om deze fout te voorkomen.
1. Gebruik de operator %in%
Eén manier om deze fout te voorkomen is door de operator %in% te gebruiken bij het uitvoeren van de toewijzing:
#assign column B a value of 10 where A is equal to 5 df[df$A %in% 5,]$B <- 10 #view updated data frame df AB 1 3 12 2 4 13 3 4 7 4 NA 7 5 5 10 6 8 11 7 5 10 8 9 7
Houd er rekening mee dat een waarde van 10 is toegewezen aan elke rij in kolom B, waarbij de overeenkomstige waarde in kolom A 5 is en dat we geen fouten ontvangen.
2. Gebruik is.na()
Een andere manier om deze fout te voorkomen is door de functie is.na() te gebruiken bij het uitvoeren van de opdracht:
#assign column B a value of 10 where A is equal to 5
df[!is. na (df$A) & df$A == 5, ]$B <- 10
#view updated data frame
df
AB
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 10
6 8 11
7 5 10
8 9 7
Nogmaals, we kunnen een waarde van 10 toewijzen aan elke rij in kolom B, waarbij de overeenkomstige waarde in kolom A 5 is en we geen fouten ontvangen.
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