Como corrigir em r: valores ausentes não são permitidos em atribuições subscritas


Uma mensagem de erro que você pode encontrar ao usar 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

Este erro normalmente ocorre quando você tenta atribuir valores em uma coluna usando valores de outra coluna, mas os valores NA estão presentes.

O exemplo a seguir mostra como resolver esse erro na prática.

Como reproduzir o erro

Suponha que criemos o seguinte quadro de dados em 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

Agora suponha que tentamos atribuir um valor de 10 a cada linha da coluna B, onde o valor correspondente na coluna 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

Recebemos um erro porque há valores NA na coluna A e a mensagem de erro nos informa explicitamente que valores ausentes não são permitidos em atribuições de subscritos de quadros de dados .

Como evitar o erro

Existem duas maneiras de evitar esse erro.

1. Use o operador %in%

Uma maneira de evitar esse erro é usar o operador %in% ao realizar a atribuição:

 #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

Observe que um valor 10 foi atribuído a cada linha da coluna B, onde o valor correspondente na coluna A é 5 e não recebemos erros.

2. Use is.na()

Outra forma de evitar esse erro é usar a função is.na() ao realizar a atribuição:

 #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

Novamente, podemos atribuir um valor de 10 a cada linha da coluna B, onde o valor correspondente na coluna A é 5 e não recebemos erros.

Recursos adicionais

Os tutoriais a seguir explicam como corrigir outros erros comuns no R:

Como consertar em R: argumentos envolvem diferentes números de linhas
Como corrigir em R: erro na seleção de argumentos não utilizados
Como reparar em R: a substituição tem comprimento zero

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *