O pacote dplyr do software R traz uma sintaxe intuitiva e eficiente para manipulação de dados, permitindo a filtragem, transformação, agrupamento e resumo de grandes conjuntos de dados de forma concisa e rápida. Considere uma base de dados (armazenada no objeto dados) que contém informações sobre processos judiciais e possui as seguintes variáveis: • ID: identificador único do processo; • Data_Abertura: data em que o processo foi iniciado; • Status: status do processo (“Em andamento”, “Finalizado” ou “Arquivado”); e • Valor_Controversia: valor monetário em disputa no processo. Com base nesse contexto, considere o interesse de encontrar o número total de processos que têm valor de controvérsia superior a R$ 1.000.000,00 em cada um dos três tipos de status possíveis. Se esse resultado for armazenado no objeto Total_Controversia, qual das alternativas a seguir faz essa operação com funções do dplyr?
- A)dados %>% filter(Valor_Controversia > 1000000) %>% group_by(Status) %>% summarise(Total_Controversia = count())
Errada, porque count() não é a função apropriada dentro de summarise() nesse contexto e a estrutura da cadeia está inconsistente.
- B)dados %>% summarise(Total_Controversia = count()) %>% filter(Valor_Controversia > 1000000) %>% group_by(Status)
Errada, porque summarise() vem antes do filtro e do agrupamento, o que inverte a lógica da consulta e quebra o resultado desejado.
- C)dados %>% group_by(Status) %>% summarise(Total_Controversia = count()) %>% filter(Valor_Controversia > 1000000)
Errada, porque o filtro foi colocado depois do resumo, quando os dados brutos necessários para essa filtragem já não estão mais disponíveis.
- D)dados %>% filter(Valor_Controversia > 1000000) %>% group_by(Status) %>% summarise(Total_Controversia = n())
Certa, pois filtra os processos com valor acima de 1.000.000, agrupa por Status e resume a quantidade com n().
- E)dados %>% summarise(Total_Controversia = n()) %>% filter(Valor_Controversia > 1000000) %>% group_by(Status)
Errada, porque summarise() é usado antes de filtrar e agrupar, além de não manter as variáveis necessárias para a operação pedida.
Gabarito: D
No dplyr, a ordem das funções faz toda a diferença: primeiro você filtra os registros que interessam, depois agrupa e por fim resume. Aqui, o objetivo é contar quantos processos têm Valor_Controversia acima de 1.000.000 em cada Status, então faz sentido usar filter() para separar os casos relevantes, group_by(Status) para dividir por tipo de status e summarise() com n() para contar as linhas de cada grupo. O detalhe importante é que n() é a função correta para contar registros dentro de um resumo do dplyr. Já count() costuma ser usada de forma direta com group_by() ou até sozinha, mas não é a escolha adequada dentro de summarise() nesse formato de questão. Em prova, isso costuma ser a diferença entre “parece certo” e “está certo”. Por isso, o gabarito D está correto: ele filtra os processos com valor superior a 1 milhão, agrupa pelo Status e depois calcula o total de processos em cada grupo com n(). O resultado pode ser armazenado em Total_Controversia, exatamente como o enunciado pede. Em resumo: filter() seleciona, group_by() organiza, summarise() sintetiza. É a receita clássica do dplyr, quase um arroz com feijão da manipulação de dados.