Dplyr é uma gramática de manipulação de dados, fornecendo um conjunto consistente de verbos que o ajudam a resolver os desafios de manipulação de dados mais comuns:
arrange() muda o pedido das linhas.
group_by() permite operações de grupo no conceito “split-apply-combine”
Todos eles combinam naturalmente com group_by() que permite executar qualquer operação “por grupo”. Você pode aprender mais sobre eles na vinheta (“dplyr”). Além desses verbos de tabela única, dplyr também fornece uma variedade de verbos de duas tabelas, nas quais você pode aprender sobre a vinheta (“two-table”).
(Traduzido e adaptado do site oficial: Site oficial do dplyr )
dados =freeny
head(dados)
## y lag.quarterly.revenue price.index income.level
## 1962.25 8.79236 8.79636 4.70997 5.82110
## 1962.5 8.79137 8.79236 4.70217 5.82558
## 1962.75 8.81486 8.79137 4.68944 5.83112
## 1963 8.81301 8.81486 4.68558 5.84046
## 1963.25 8.90751 8.81301 4.64019 5.85036
## 1963.5 8.93673 8.90751 4.62553 5.86464
## market.potential
## 1962.25 12.9699
## 1962.5 12.9733
## 1962.75 12.9774
## 1963 12.9806
## 1963.25 12.9831
## 1963.5 12.9854
Seleciona uma ou mais colunas de um data.frame, exemplo:
# com dplyr
select(dados, price.index, income.level)%>% head() #Seleciona a coluna price.index e income.level
## price.index income.level
## 1962.25 4.70997 5.82110
## 1962.5 4.70217 5.82558
## 1962.75 4.68944 5.83112
## 1963 4.68558 5.84046
## 1963.25 4.64019 5.85036
## 1963.5 4.62553 5.86464
# sem dplyr
head(dados[, c("price.index", "income.level")]) #Seleciona a coluna price.index e income.level
## price.index income.level
## 1962.25 4.70997 5.82110
## 1962.5 4.70217 5.82558
## 1962.75 4.68944 5.83112
## 1963 4.68558 5.84046
## 1963.25 4.64019 5.85036
## 1963.5 4.62553 5.86464
Filtra a base de dados de acordo com algum critério estabelecido, exemplo:
head(dados)
## y lag.quarterly.revenue price.index income.level
## 1962.25 8.79236 8.79636 4.70997 5.82110
## 1962.5 8.79137 8.79236 4.70217 5.82558
## 1962.75 8.81486 8.79137 4.68944 5.83112
## 1963 8.81301 8.81486 4.68558 5.84046
## 1963.25 8.90751 8.81301 4.64019 5.85036
## 1963.5 8.93673 8.90751 4.62553 5.86464
## market.potential
## 1962.25 12.9699
## 1962.5 12.9733
## 1962.75 12.9774
## 1963 12.9806
## 1963.25 12.9831
## 1963.5 12.9854
# com dplyr
filter(dados, lag.quarterly.revenue > 8.8) %>% head() #Filtra somente se lag.quarterly.revenue > 8.8
## y lag.quarterly.revenue price.index income.level market.potential
## 1 8.81301 8.81486 4.68558 5.84046 12.9806
## 2 8.90751 8.81301 4.64019 5.85036 12.9831
## 3 8.93673 8.90751 4.62553 5.86464 12.9854
## 4 8.96161 8.93673 4.61991 5.87769 12.9900
## 5 8.96044 8.96161 4.61654 5.89763 12.9943
## 6 9.00868 8.96044 4.61407 5.92574 12.9992
# sem dplyr
head(dados[dados$lag.quarterly.revenue > 8.8 ,]) #Filtra somente se lag.quarterly.revenue > 8.8
## y lag.quarterly.revenue price.index income.level
## 1963 8.81301 8.81486 4.68558 5.84046
## 1963.25 8.90751 8.81301 4.64019 5.85036
## 1963.5 8.93673 8.90751 4.62553 5.86464
## 1963.75 8.96161 8.93673 4.61991 5.87769
## 1964 8.96044 8.96161 4.61654 5.89763
## 1964.25 9.00868 8.96044 4.61407 5.92574
## market.potential
## 1963 12.9806
## 1963.25 12.9831
## 1963.5 12.9854
## 1963.75 12.9900
## 1964 12.9943
## 1964.25 12.9992
Ordena a base de dados em uma coluna, exemplo:
# com dplyr
arrange(dados, price.index) %>% head() #ordena as observacoes doa base de dados segundo price.index
## y lag.quarterly.revenue price.index income.level market.potential
## 1 9.79424 9.77536 4.27789 6.20030 13.1664
## 2 9.77536 9.74924 4.27839 6.19377 13.1625
## 3 9.74924 9.71774 4.29627 6.18768 13.1579
## 4 9.71774 9.68683 4.30552 6.18231 13.1593
## 5 9.69958 9.69405 4.30909 6.17369 13.1459
## 6 9.68683 9.69958 4.30909 6.16135 13.1520
# sem dplyr
head(dados[order(dados$price.index), ]) #ordena as observacoes doa base de dados segundo price.index
## y lag.quarterly.revenue price.index income.level
## 1971.75 9.79424 9.77536 4.27789 6.20030
## 1971.5 9.77536 9.74924 4.27839 6.19377
## 1971.25 9.74924 9.71774 4.29627 6.18768
## 1971 9.71774 9.68683 4.30552 6.18231
## 1970.5 9.69958 9.69405 4.30909 6.17369
## 1970.75 9.68683 9.69958 4.30909 6.16135
## market.potential
## 1971.75 13.1664
## 1971.5 13.1625
## 1971.25 13.1579
## 1971 13.1593
## 1970.5 13.1459
## 1970.75 13.1520
Cria uma nova coluna, exemplo:
# sem dplyr
head(dados$divisao <- dados$price.index/dados$income.level) #Cria a coluna divisao com o resultado da operacao
## [1] 0.8091203 0.8071591 0.8042091 0.8022622 0.7931461 0.7887151
dados$nome <- ifelse(dados$income.level>6,"jose","Maria") #Cria a coluna nome se atender os criterios
# com dplyr
dados <- mutate(dados, divisao=price.index/income.level, nome=ifelse(dados$income.level>6,"jose","Maria"));head(dados) #Cria a coluna divisao com o resultado da operacao e a coluna nome se atender os criterios
## y lag.quarterly.revenue price.index income.level market.potential
## 1 8.79236 8.79636 4.70997 5.82110 12.9699
## 2 8.79137 8.79236 4.70217 5.82558 12.9733
## 3 8.81486 8.79137 4.68944 5.83112 12.9774
## 4 8.81301 8.81486 4.68558 5.84046 12.9806
## 5 8.90751 8.81301 4.64019 5.85036 12.9831
## 6 8.93673 8.90751 4.62553 5.86464 12.9854
## divisao nome
## 1 0.8091203 Maria
## 2 0.8071591 Maria
## 3 0.8042091 Maria
## 4 0.8022622 Maria
## 5 0.7931461 Maria
## 6 0.7887151 Maria
Estes são utilizads geralmente em conjunto com outros comando
dados%>% #utiliza esses dados
group_by(nome)%>% #Agrupa por nome e
arrange(dados, price.index) %>% #ordena as observacoes doa base de dados segundo price.index
head()
## # A tibble: 6 x 7
## # Groups: nome [1]
## y lag.quarterly.revenue price.index income.level market.potential
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 8.79137 8.79236 4.70217 5.82558 12.9733
## 2 8.79236 8.79636 4.70997 5.82110 12.9699
## 3 8.81301 8.81486 4.68558 5.84046 12.9806
## 4 8.81486 8.79137 4.68944 5.83112 12.9774
## 5 8.90751 8.81301 4.64019 5.85036 12.9831
## 6 8.93673 8.90751 4.62553 5.86464 12.9854
## # ... with 2 more variables: divisao <dbl>, nome <chr>
Agrupa a base de dados segundo um vetor de categorias. Isto implica que todas as operações subsequentes serão realizadas separadas por grupos
Vai agregar um conjunto de números em um único número conforme a função de interesse, exemplo:
dados%>% #utiliza esses dados
filter(price.index>4) %>% #filtra por
arrange(desc(divisao))%>% #ordem decrescente
summarise(media=mean(price.index), devio.padrao=sd(income.level))%>%
head()
## media devio.padrao
## 1 4.496182 0.1204432