Função mean() e NA

Boa tarde!
estou trabalhando com a base de dados do imdb, para treinar.
eu realizei o seguinte script:

library (tidyverse)
library(readr)
library(dplyr)
imdb <- imdb %>%
mutate( lucro = orcamento - receita)
imdb %>%
group_by(lucro, na.rm = TRUE) %>%
mean(lucro)

Só que recebo um erro que não me retornam a média do lucro:
argument is not numeric or logical: returning NA[1] NA

Não entendi por que retorna NA, se eu removi eles…

Oi, Thainara!

No R, embora algumas funções funcionem de maneira parecida, cada função pode ter o seu jeito de usar. Esse “jeito de usar” se refere aos argumentos que cada uma possui.

O argumento na.rm existe em algumas funções, como mean(), min() e max(). A função group_by() não possui esse argumento. Para saber os argumentos que cada função possui, basta olhar a sua documentação: help(group_by).

Lembre que o objetivo de uma função no R é fazer uma ação específica ou resolver um problema específico. Então faz sentido não não existir esse argumento dentro da função group_by(), pois o objetivo dela é agrupar a base, e não modificá-la.

Além disso, olhando agora a lógica do código, não é preciso agrupar pela variável lucro. Se você gostaria apenas tirar a média do lucro, poderia fazer de duas maneiras:

mean(imdb$lucro, na.rm = TRUE)

ou

 imdb %>% 
  pull(lucro) %>% 
  mean(na.rm = TRUE)

Veja que o argumento na.rm = TRUE vai dentro da função mean(), que de fato possui esse parâmetro. No segundo exemplo, utilizei a função pull(), do pacote {dplyr}. Ela retorna apenas a coluna que indicarmos dentro dela, como um vetor. Isso é preciso pois a função mean() calcula média apenas de vetores e não de data.frames.

Por fim, só uma dica para as suas próximas perguntas: se você formatar o código como fiz acima, fica mais fácil de ler :slight_smile:. Na hora que estiver escrevendo a pergunta, basta selecionar o texto com código e clicar no botão </> aqui no editor.