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

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert