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:

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 )

Comandos

Base de dados que será utilizada:

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

select()

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

filter()

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

arrange()

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

mutate()

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

Comando usados geralmente em conjunto com outros

Estes são utilizads geralmente em conjunto com outros comando

group_by(), exemplo:

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

summarise()

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