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