In [ ]:
# install.packages('tidyverse')
In [1]:
library(dplyr)
In [2]:
df <- mtcars
str(df)
In [3]:
# Filtrando apenas os registros com determinadas condições:
head(filter(df,cyl<8,hp>100))
In [4]:
# Usando o resultado para criar outro DataFrame:
df2 <- filter(df,cyl<8,hp>100)
In [6]:
# Pegando partes de um DataFrame. Da linha 10 à linha 20 (inclusive) - 11 linhas:
slice(df,10:20)
In [7]:
# Classificando por cyl e depois por mpg:
head(arrange(df,cyl,mpg))
In [9]:
# Os carros que consomem menos (do mpg maior para o menor)
head(arrange(df,desc(mpg)))
In [11]:
# Selecionando colunas e criando outro DataFrame:
carros <- select(df,cyl,hp)
In [12]:
head(carros)
In [14]:
# Quantos tipos de cilindros diferentes existem?
distinct(select(df,cyl))
In [15]:
# Criando uma nova coluna (hp por cilindro):
head(mutate(df, hp_cyl = hp / cyl))
In [16]:
# Resumindo um DataFrame por agregação. Média de hp dos carros:
summarise(df,Media_HP=mean(hp,na.rm=TRUE)) # na.rm=TRUE remove as linhas sem valores em HP
In [19]:
# Permite concatenar operações sobre um mesmo DataFrame
df <- mtcars %>% select(mpg,hp,cyl) %>% arrange(desc(mpg),cyl)
head(df)
gather cria novas linhas, fazendo um "pivô", uma transposição de colunas em linhas. Vamos criar um DataFrame assim
In [24]:
library(tidyr)
In [25]:
filial <- c(100,200)
ano <- c(2016,2016,2017,2017)
semestre1 <- c(153450.00,102300.00)
semestre2 <- c(195370.00,122300.00)
df_vendas <- data.frame(filial=filial,ano=ano,semestre1 = semestre1,semestre2 = semestre2)
In [26]:
df_vendas
Vamos separar semestre 1 e semestre 2 em linhas, em vez de colunas:
In [27]:
df_vendas2 <- gather(df_vendas,semestre,venda,semestre1:semestre2)
df_vendas2
A função spread faz o contrário da função gather transpondo linhas em colunas:
In [28]:
df_vendas3 <- spread(df_vendas2,semestre,venda)
df_vendas3
A função separate separa campos em linhas, de acordo com uma expressão regular. Suponha o dataset "desemprego.csv", o campo "periodo" é formado por ano + "." + mês. A coluna a ser separada tem que ser do tipo "caractere" e não numérica! Vamos separar ano e mês:
In [42]:
df_desemprego <- read.csv('desemprego.csv',colClasses= c('character','numeric'))
str(df_desemprego)
In [43]:
head(df_desemprego)
In [49]:
df_sep <- separate(df_desemprego,'Periodo',c('ano','mes'),sep='[.]')
head(df_sep)
A função unite faz o contrário:
In [47]:
df_original <- unite(df_sep,'Periodo',c('ano','mes'),sep='.')
head(df_original)
In [ ]: