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?

ATENÇÃO: Já avisei algumas vezes, o WordPress às vezes bagunça a identação (espaçamento). Tome cuidado ao copiar e colar o código em 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:

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.

E aí, curtiu o post?

E aí? Gostou do conteúdo? Se inscreva para receber todas as novidades. Deixe seu e-mail em INSCREVA-SE na barra à direita, logo abaixo de pesquisar. E, por favor, não deixe de comentar, dar seu feedback e, principalmente, compartilhar com seus amigos. De verdade, isso faz toda a diferença. Além disso, você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @UniDosDados, no Instagram @universidadedosdados ou por alguma das redes que você encontra em Sobre o Estatsite / Contato, como meu canal de Youtube Canal Universidade dos Dados.

Aproveite e adquira sua camiseta de data science na LOJA DA UNIVERSIDADE DOS DADOS. Vai ficar estiloso e me ajudar neste projeto!

BONS ESTUDOS!

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *