Minhas funções mais utilizadas em R
Há anos eu tenho um documento no meu Standard Notes só com as funções e snippets que eu mais uso em R, uma forma mais recorrente de copiar e colar coisas eficientes.
Compartilho abaixo:
Remove notação científica
options(scipen=999)
Calcula percentual de contagem em relação ao total (dplyr)
mutate(pct_total = round((n/sum(n))*100,1))
Calcula variação percentual em relação ao valor imediatamente anterior (dplyr)
mutate(var_mes = ((soma/lag(soma) - 1) * 100)) %>%
Conserta escala Y no ggplot (ggplot2)
scale_y_continuous(labels=function(x) format(x, big.mark = ",", scientific = FALSE))
Ajusta escala X para datas no ggplot (ggplot2 + scales)
scale_x_date(breaks = scales::pretty_breaks(n = 10))
scale_x_date(date_breaks = "1 month", date_labels = "%b %Y")
Ajusta ângulo da legenda para data (ggplot2)
theme(axis.text.x=element_text(angle=60, hjust=1))
Deflaciona valores com o pacote deflateBR
Pacote por Fernando Meireles e Denisson Silva — https://github.com/meirelesff/deflateBR
d$valor_novo <- deflate(d$valor_velho, d$data, "mes/ano" [do ultimo indice], "ipca")
Carrega vários CSVs em um único arquivo (data.table)
library(data.table)
filenames <- list.files("C:/your/folder", pattern="*.csv", full.names=TRUE)
data <- rbindlist(lapply(filenames,fread))
Médias móveis (pacote pracma)
Documentação: https://www.rdocumentation.org/packages/pracma/versions/1.9.9/topics/movavg
Cria média móvel a cada X dias (PREFERENCIAL) — exponencial, com pracma
mutate(ma = movavg(_variavel_, 2, "e"))
Cria média móvel a cada X dias (ALTERNATIVO, com zoo)
library(zoo)
mutate(ma=rollmean(variavel,7 (DIAS),align='right',fill=NA))
Cria média móvel a cada X dias (ALTERNATIVO, com lag do dplyr)
mutate(lag1=lag(_variavel1_), lag2=lag(_variavel1_), med_movel=(lag1+lag2)/2)
Reordena colunas de gráfico de barras no ggplot (ggplot2)
aes(reorder(NOME,valor), valor)
Transforma data brasileira em data internacional (base R)
as.Date(d, "%d.%m.%Y")
Apenas mês e ano de data (base R)
format(as.Date(d), "%Y-%m")
Carrega vários CSVs de uma vez (plyr + readr)
library(plyr)
library(readr)
arquivos <- list.files(path="dados", pattern="*.csv", full.names=TRUE)
d <- ldply(arquivos, read_csv)
df <- readr::read_csv(arquivos, id = "file_name")