Por que:
data.frame(a=c(TRUE,NA)) %>% mutate(a=replace_na(FALSE))
retorna
a
1 FALSE
2 FALSE
e assim definir a coluna inteira para o valor em vez de apenas os elementos NA?
Neste caso mutate
supõe-se que deve ser chamada a versão "vetor" de replace_na
, ou seja, deve ser equivalente a:
> df <- data.frame(a=c(TRUE,NA))
> df$a <- replace_na(df$a, FALSE)
A documentação replace_na(data, replace)
diz:
Se data for um vetor, replace assume um único valor. Esse único valor substitui todos os valores ausentes no vetor. replace será convertido para o tipo de data.
A propósito, e não relacionado a esta questão,
data.frame(a=c(TRUE,NA)) %>% replace_na(list("a"=FALSE))
funciona como esperado.
Você está usando mutate() incorretamente ao não dar à função replace_na() uma coluna para operar. Executar replace_na(FALSE) retorna FALSE de forma simples e isso explica seu resultado. A terceira linha de código no reprex fornece o resultado que você quer.
Criado em 2024-11-13 com reprex v2.1.1
Para resolver isso, segue o exemplo de uso do replace_na:
de acordo com o documento replace_na, https://tidyr.tidyverse.org/reference/replace_na.html . deveria ser
no seu código original: replace_na(FALSE) o resultado é FALSE
no entanto, a resposta desejada é substituir df$a na por FALSE, então o modo correto deve ser:
na função mutate do dplyr e no modo de pipeline %>%, o df$a pode ser escrito como a. A maneira mais organizada do dplyr é: