Come risolvere in r: i valori mancanti non sono consentiti nelle assegnazioni in pedice


Un messaggio di errore che potresti incontrare quando usi R è:

 Error in `[<-.data.frame`(`*tmp*`, df$A == 5, , value = list(A = c(NA, : 
  missing values are not allowed in subscripted assignments of data frames

Questo errore si verifica in genere quando si tenta di assegnare valori in una colonna utilizzando i valori di un’altra colonna, ma sono presenti valori NA .

L’esempio seguente mostra come risolvere questo errore nella pratica.

Come riprodurre l’errore

Supponiamo di creare il seguente frame di dati in R:

 #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

Supponiamo ora di provare ad assegnare un valore pari a 10 a ciascuna riga della colonna B dove il valore corrispondente nella colonna A è 5:

 #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

Riceviamo un errore perché ci sono valori NA nella colonna A e il messaggio di errore ci dice esplicitamente che i valori mancanti non sono consentiti nelle assegnazioni di pedici dei frame di dati .

Come evitare l’errore

Esistono due modi per evitare questo errore.

1. Utilizzare l’operatore %in%.

Un modo per evitare questo errore è utilizzare l’operatore %in% durante l’esecuzione dell’assegnazione:

 #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

Tieni presente che a ciascuna riga nella colonna B è stato assegnato un valore pari a 10, dove il valore corrispondente nella colonna A è 5 e non riceviamo errori.

2. Usa is.na()

Un altro modo per evitare questo errore è utilizzare la funzione is.na() durante l’esecuzione dell’assegnazione:

 #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

Ancora una volta, possiamo assegnare un valore pari a 10 a ciascuna riga nella colonna B dove il valore corrispondente nella colonna A è 5 e non riceviamo errori.

Risorse addizionali

I seguenti tutorial spiegano come correggere altri errori comuni in R:

Come risolvere in R: gli argomenti coinvolgono un numero diverso di righe
Come risolvere in R: errore nella selezione di argomenti inutilizzati
Come riparare in R: la sostituzione ha lunghezza zero

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *