Equivalente ao Proc Sql Group By no R

Suponha que você tenha uma tabela analítica com as informações de compras dos seus clientes. Cada linha da tabela equivale a uma compra diferente que o cliente fez. O que você quer é saber o valor médio das compras de cada cliente. Como você conseguiria fazer isso no R?

Bom, primeiro, vamos visualizar o que queremos fazer. Abaixo, você tem a imagem de duas tabelas, uma é a analítica e a outra é a visão consolidada:

Captura de Tela 2018-12-03 às 16.40.39

Já sabemos fazer isso no SQL ou no PROC SQL do SAS, sendo que este segundo ficaria da seguinte forma (você pode ver o tutorial completo do PROC SQL no post Tutorial: Proc Sql (SAS)):

proc sql;create table tabela_exemplo_2 as    select id, mean(vlr_compra) as vlr_compra_medio    from tabela_exemplogroup by 1;run;

Mas como poderíamos fazer este agrupamento no R?

Bom, é simples, precisamos utilizar a função aggregate. Primeiro, vamos construir esta base no R:


id = c("AA111","AA111","AA111","BB222","BB222","BB222","CC333","CC333","CC333");

vlr_compra = c(200,250,300,50,350,500,300,150,150);

data = as.Date(c('2018-01-21','2018-02-25','2018-06-30',
'2018-04-25','2018-09-20','2018-11-20',
'2018-07-15','2018-09-05','2018-11-11'))

tabela_exemplo = data.frame(id, vlr_compra, data)

Agora, vamos usar a função aggregate. É bem simples, tudo que você precisa fazer é apontar para ela qual a variável que será agrupada (valor da compra), qual a variável chave do agrupamento (id) e qual o tipo de agrupamento (média):


tabela_exemplo_2 = aggregate(tabela_exemplo$vlr_compra, list(tabela_exemplo$id), mean)

Você deve ter notado que o nome da primeira variável ficou Group.1 e da segunda ficou como x. Uma forma de melhorar isso, é combinando a função setNames, fazendo com que ela receba o aggregate como primeiro argumento e os nomes que você deseja aplicar como segundo argumento:


tabela_exemplo_2 = setNames(aggregate(tabela_exemplo$vlr_compra, list(tabela_exemplo$id), sum), c("id","vlr_compra_medio"))

Mas e se você tivesse mais de uma variável a ser agrupada? E se eu quisesse a soma das variáveis?

Neste caso, o código ficaria melhor com as posições das colunas. Suponha que você tivesse na coluna 2 o valor da compra e na coluna 3 o desconto aplicado. Para calcular a soma destas variáveis por cada id, teríamos que usar o seguinte código:


tabela_exemplo_2 = aggregate(tabela_exemplo[, 2:3] list(tabela_exemplo$id), sum)

Simples, não?

Se você ficou com alguma dúvida, tem alguma crítica ou sugestão, deixe seu comentário ou entre em contato comigo pelo formulário que está em Sobre o EstatSite.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s