install.packages("xlsx", repos = "http://cran.us.r-project.org")
library(xlsx)
res <- read.xlsx(arquivo, 1) # 1 corresponde ao número da Planilha que será lida
out <- write.xlsx(x = res, file="./dados/Novo_Arquivo.xlsx", sheetName = "Nova", showNA = FALSE)
# Sintaxe
read.table(file, header = FALSE, sep = "", quote = "\"'",
dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),
row.names, col.names, as.is = !stringsAsFactors,
na.strings = "NA", colClasses = NA, nrows = -1,
skip = 0, check.names = TRUE, fill = !blank.lines.skip,
strip.white = FALSE, blank.lines.skip = TRUE,
comment.char = "#",
allowEscapes = FALSE, flush = FALSE,
stringsAsFactors = default.stringsAsFactors(),
fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)
read.csv(file, header = TRUE, sep = ",", quote = "\"",
dec = ".", fill = TRUE, comment.char = "", ...)
read.csv2(file, header = TRUE, sep = ";", quote = "\"",
dec = ",", fill = TRUE, comment.char = "", ...)
read.delim(file, header = TRUE, sep = "\t", quote = "\"",
dec = ".", fill = TRUE, comment.char = "", ...)
read.delim2(file, header = TRUE, sep = "\t", quote = "\"",
dec = ",", fill = TRUE, comment.char = "", ...)
Exemplos:
dados <- read.table("arquivo.csv", header=TRUE, sep=",", row.names="id")
dados <- read.csv("arquivo.txt", header=T, dec=".",sep="\t")
dados <- read.csv2("arquivos.csv",
header = FALSE,
quote = "\"",
dec = ",",
row.names = c("M", "N", "O", "P", "Q"),
col.names= c("X", "Y", "Z", "A","B"),
stringsAsFactors=TRUE)
dados <- read.csv(
file = "https://raw.githubusercontent.com/flaviobrito/dataudit/master/dados/Hospital.csv",
sep = ";",
stringsAsFactors = FALSE,
na.strings = c("", " ")
)
dados <- read.delim2("arquivo.txt",
header = FALSE,
sep = "\t",
quote "\"",
dec = ".",
row.names = c("M", "N", "O"),
col.names= c("X", "Y", "Z", "A","B"),
colClasses = (rep("integer",2),
"date",
"numeric",
"character")
na.strings = "EMPTY",
skip = 2) # Pula as duas primeiras linhas antes de carregar
#Tamanho fixado
#Cria arquivo temporário
f <- tempfile()
#Dá saída da informação
cat("ID01Joao M6.21970-01-01\nID02JaneteF5.61977-04-20\nID03Adao M5.71979-05-13\n", file=f)
#Especificação dos campos por tamanho
d <- read.fwf(f, c(4,6,1,3,10))
# Apresenta a estrutura de d
str(d)
'data.frame': 3 obs. of 5 variables:
$ V1: Factor w/ 3 levels "ID01","ID02",..: 1 2 3
$ V2: Factor w/ 3 levels "Adao ","Janete",..: 3 2 1
$ V3: Factor w/ 2 levels "F","M": 2 1 2
$ V4: num 6.2 5.6 5.7
$ V5: Factor w/ 3 levels "1970-01-01","1977-04-20",..: 1 2 3
d
V1 V2 V3 V4 V5
1 ID01 Joao M 6.2 1970-01-01
2 ID02 Janete F 5.6 1977-04-20
3 ID03 Adao M 5.7 1979-05-13
getwd()
## [1] "C:/Users/flavi/OneDrive/Source/Repos/DataAudit"
setwd("./dados/")
Dados_A <- read.csv2("Dados_A.csv", sep=";",stringsAsFactors=FALSE, header = TRUE, na.strings = " ")
Dados_A
## NUMFUNC NUMVINC SALARIO
## 1 102929 1 1000
## 2 109999 3 3000
## 3 102929 2 NA
## 4 119836 1 500
Dados_B <- read.csv2("Dados_B.csv", sep=";",stringsAsFactors=FALSE, header = TRUE, na.strings = " ")
Dados_B
## NUMFUNC NUMVINC SETOR
## 1 119836 1 SETOR_ABC
## 2 109999 3 SETOR_C
Como alguns nem sempre têm conhecimento o acesso a banco de dados, as operações abaixo são muito interessantes se comparadas com um JOIN (Banco de Dados).
Para conseguir a saída abaixo, digite:
m <- merge(Dados_A,Dados_B, all=TRUE)
m
## NUMFUNC NUMVINC SALARIO SETOR
## 1 102929 1 1000 <NA>
## 2 102929 2 NA <NA>
## 3 109999 3 3000 SETOR_C
## 4 119836 1 500 SETOR_ABC
Para conseguir a saída abaixo, digite:
n <- merge(Dados_A,Dados_B, all.Dados_A=TRUE)
n
## NUMFUNC NUMVINC SALARIO SETOR
## 1 109999 3 3000 SETOR_C
## 2 119836 1 500 SETOR_ABC
Através desse comando indicamos ao R que o data frame Dados_A possui os campos de junção que devem ser respeitados.
O mesmo pode ser conseguido com o comando a seguir:
o <- merge(Dados_A,Dados_B, by = c("NUMFUNC","NUMVINC"))
o
## NUMFUNC NUMVINC SALARIO SETOR
## 1 109999 3 3000 SETOR_C
## 2 119836 1 500 SETOR_ABC
Para escolher um conjunto de saída específico utilizamos
p <- m[c("NUMFUNC","NUMVINC","SETOR")]
p
## NUMFUNC NUMVINC SETOR
## 1 102929 1 <NA>
## 2 102929 2 <NA>
## 3 109999 3 SETOR_C
## 4 119836 1 SETOR_ABC
c (“NUMFUNC”,”NUMVINC”,”SETOR”) – cria um vetor com esses 3 campos. Repare que m é um data frame:
Veja a estrutura de m com o comando:
str(m)
## 'data.frame': 4 obs. of 4 variables:
## $ NUMFUNC: int 102929 102929 109999 119836
## $ NUMVINC: int 1 2 3 1
## $ SALARIO: int 1000 NA 3000 500
## $ SETOR : chr NA NA "SETOR_C" "SETOR_ABC"
Para conseguir a saída abaixo,usaremos o seguinte comando:
q <- merge(Dados_A,Dados_B, by = c("NUMFUNC"))
q
## NUMFUNC NUMVINC.x SALARIO NUMVINC.y SETOR
## 1 109999 3 3000 3 SETOR_C
## 2 119836 1 500 1 SETOR_ABC
Para conseguir a saída abaixo, digitaremos o seguinte comando:
u <- merge(Dados_A,Dados_B, by = c("NUMVINC"))
u
## NUMVINC NUMFUNC.x SALARIO NUMFUNC.y SETOR
## 1 1 102929 1000 119836 SETOR_ABC
## 2 1 119836 500 119836 SETOR_ABC
## 3 3 109999 3000 109999 SETOR_C
Para conseguir a saída abaixo, usaremos o seguinte comando:
v <- merge(Dados_A,Dados_B, by=NULL)
v
## NUMFUNC.x NUMVINC.x SALARIO NUMFUNC.y NUMVINC.y SETOR
## 1 102929 1 1000 119836 1 SETOR_ABC
## 2 109999 3 3000 119836 1 SETOR_ABC
## 3 102929 2 NA 119836 1 SETOR_ABC
## 4 119836 1 500 119836 1 SETOR_ABC
## 5 102929 1 1000 109999 3 SETOR_C
## 6 109999 3 3000 109999 3 SETOR_C
## 7 102929 2 NA 109999 3 SETOR_C
## 8 119836 1 500 109999 3 SETOR_C
v <- merge(Dados_A,Dados_B, by="NUMFUNC", all.y=TRUE)
v
## NUMFUNC NUMVINC.x SALARIO NUMVINC.y SETOR
## 1 109999 3 3000 3 SETOR_C
## 2 119836 1 500 1 SETOR_ABC
v <- merge(Dados_A,Dados_B, by="NUMFUNC", all.x=TRUE)
v
## NUMFUNC NUMVINC.x SALARIO NUMVINC.y SETOR
## 1 102929 1 1000 NA <NA>
## 2 102929 2 NA NA <NA>
## 3 109999 3 3000 3 SETOR_C
## 4 119836 1 500 1 SETOR_ABC
A operação append une os dois data frames pelas linhas, colocando um após o outro. No exemplo abaixo temos 2 data frames com o mesmo número de colunas e todas do mesmo tipo. Desta forma faremos a operação de união destes em um outro data frame que chamaremos de “total”
total <- rbind(DADOS_A_JANEIRO, DADOS_A_FEVEREIRO)
Esta operação modifica a distribuição de valores, trazendo colunas para linhas
id <- c(1,1,2,3)
time <- c(1,2,1,1)
x1 <- c(5,3,6,2)
x2 <- c(6,5,1,4)
df <- data.frame(id,time,x1,x2)
df
### Saída
id time x1 x2
1 1 1 5 6
2 1 2 3 5
3 2 1 6 1
4 3 1 2 4
install.packages("reshape2")
library(reshape2)
novo_df <- melt(df, id=c("id","time"))
novo_df
#Saída
id time variable value
1 1 1 x1 5
2 1 2 x1 3
3 2 1 x1 6
4 3 1 x1 2
5 1 1 x2 6
6 1 2 x2 5
7 2 1 x2 1
8 3 1 x2 4
# Calculando com dados após melt
#Função cast
Sintaxe: dcast(data, formula, function)
subj_medias <- dcast(novo_df, id~variable, mean)
subj_medias
id x1 x2
1 1 4 5.5
2 2 6 1.0
3 3 2 4.0
time_medias <- dcast(novo_df, time~variable, mean)
time_medias
time x1 x2
1 1 4.333333 3.666667
2 2 3.000000 5.000000
Transpõe uma matriz ou um data frame, mundando trocando o que é coluna or linha
t(mtcars)
#Saída
Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout Valiant Duster 360
mpg 21.00 21.000 22.80 21.400 18.70 18.10 14.30
cyl 6.00 6.000 4.00 6.000 8.00 6.00 8.00
disp 160.00 160.000 108.00 258.000 360.00 225.00 360.00
hp 110.00 110.000 93.00 110.000 175.00 105.00 245.00
drat 3.90 3.900 3.85 3.080 3.15 2.76 3.21
wt 2.62 2.875 2.32 3.215 3.44 3.46 3.57
suppressMessages(library(dplyr))
x1 <- c("A", "B", "C")
x2 <- c(1,2,3)
a <- data.frame(x1,x2)
x1 <- c("A", "B", "C")
x3 <- c("T","F","T")
b <- data.frame(x1,x3)
left_join(a, b, by = "x1")
## x1 x2 x3
## 1 A 1 T
## 2 B 2 F
## 3 C 3 T
right_join(a, b, by = "x1")
## x1 x2 x3
## 1 A 1 T
## 2 B 2 F
## 3 C 3 T
inner_join(a, b, by = "x1")
## x1 x2 x3
## 1 A 1 T
## 2 B 2 F
## 3 C 3 T
full_join(a, b, by = "x1")
## x1 x2 x3
## 1 A 1 T
## 2 B 2 F
## 3 C 3 T
# Joins filtrados
semi_join(a, b, by = "x1") #Todas as linhas em a que tem uma coincidência em b
## x1 x2
## 1 A 1
## 2 B 2
## 3 C 3
anti_join(a, b, by = "x1") #Todas as linhas em a que NÃO tem uma coincidência em b
## [1] x1 x2
## <0 rows> (or 0-length row.names)
z <- NULL
x1 <- c("A", "B", "C")
x2 <- c(1,2,3)
y <- data.frame(x1,x2, stringsAsFactors = FALSE)
x1 <- as.character(c("B", "C", "D"))
x2 <- c(2,3,4)
z <- data.frame(x1,x2, stringsAsFactors = FALSE)
#Intercessão
intersect(y, z) #Linhas em comum em y e z
## x1 x2
## 1 B 2
## 2 C 3
#União
union(y, z) # Linhas que aparecem em y e também em z
## x1 x2
## 1 B 2
## 2 A 1
## 3 C 3
## 4 D 4
#Diferença
setdiff(y, z) # Linhas que aparecem em y e não em z
## x1 x2
## 1 A 1
df1 <- data.frame(nome=c("SEPLAG", "SEFAZ", "SEEDUC"),bairro=c("CENTRO","CENTRO","CENTRO"), stringsAsFactors = FALSE)
print(df1)
## nome bairro
## 1 SEPLAG CENTRO
## 2 SEFAZ CENTRO
## 3 SEEDUC CENTRO
df2 <- data.frame(nome=c("CECIERJ", "PRODERJ","SEEDUC"),bairro=c("GLORIA","GLORIA","CENTRO"), stringsAsFactors = FALSE)
print(df2)
## nome bairro
## 1 CECIERJ GLORIA
## 2 PRODERJ GLORIA
## 3 SEEDUC CENTRO
#União
union(df1,df2)
## nome bairro
## 1 SEPLAG CENTRO
## 2 SEFAZ CENTRO
## 3 SEEDUC CENTRO
## 4 CECIERJ GLORIA
## 5 PRODERJ GLORIA
#Interseção
intersect(df1,df2)
## nome bairro
## 1 SEEDUC CENTRO
#Diferença
setdiff(df1,df2)
## nome bairro
## 1 SEPLAG CENTRO
## 2 SEFAZ CENTRO
suppressMessages(library(dplyr))
library(hflights)
flights <- hflights
dim(hflights)
## [1] 227496 21
head(hflights)
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier
## 5424 2011 1 1 6 1400 1500 AA
## 5425 2011 1 2 7 1401 1501 AA
## 5426 2011 1 3 1 1352 1502 AA
## 5427 2011 1 4 2 1403 1513 AA
## 5428 2011 1 5 3 1405 1507 AA
## 5429 2011 1 6 4 1359 1503 AA
## FlightNum TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin
## 5424 428 N576AA 60 40 -10 0 IAH
## 5425 428 N557AA 60 45 -9 1 IAH
## 5426 428 N541AA 70 48 -8 -8 IAH
## 5427 428 N403AA 70 39 3 3 IAH
## 5428 428 N492AA 62 44 -3 5 IAH
## 5429 428 N262AA 64 45 -7 -1 IAH
## Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 5424 DFW 224 7 13 0 0
## 5425 DFW 224 6 9 0 0
## 5426 DFW 224 5 17 0 0
## 5427 DFW 224 9 22 0 0
## 5428 DFW 224 9 9 0 0
## 5429 DFW 224 6 13 0 0
#Dados sobre o Data Frame hflights
#Número de Registros
nrow(flights)
## [1] 227496
#Número de Variávei
ncol(flights)
## [1] 21
split(Dados_B, Dados_B$SETOR)
## $SETOR_ABC
## NUMFUNC NUMVINC SETOR
## 1 119836 1 SETOR_ABC
##
## $SETOR_C
## NUMFUNC NUMVINC SETOR
## 2 109999 3 SETOR_C
rbind(Dados_A, Dados_A)
## NUMFUNC NUMVINC SALARIO
## 1 102929 1 1000
## 2 109999 3 3000
## 3 102929 2 NA
## 4 119836 1 500
## 5 102929 1 1000
## 6 109999 3 3000
## 7 102929 2 NA
## 8 119836 1 500
Dplyr tem como objectivo proporcionar uma função para cada verbo base para manipulação de dados:
filter () permite selecionar um subconjunto de linhas em um quadro de dados. O primeiro argumento é o nome do data frame. O segundo e subseqüentes argumentos são as expressões que filtram o data frame:
attach(flights)
filter(flights, Month == 1, DayofMonth == 1) %>%head
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 1 2011 1 1 6 1400 1500 AA 428
## 2 2011 1 1 6 728 840 AA 460
## 3 2011 1 1 6 1631 1736 AA 1121
## 4 2011 1 1 6 1756 2112 AA 1294
## 5 2011 1 1 6 1012 1347 AA 1700
## 6 2011 1 1 6 1211 1325 AA 1820
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 1 N576AA 60 40 -10 0 IAH DFW 224
## 2 N520AA 72 41 5 8 IAH DFW 224
## 3 N4WVAA 65 37 -9 1 IAH DFW 224
## 4 N3DGAA 136 113 -3 1 IAH MIA 964
## 5 N3DAAA 155 117 7 -8 IAH MIA 964
## 6 N593AA 74 39 15 6 IAH DFW 224
## TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 1 7 13 0 0
## 2 6 25 0 0
## 3 16 12 0 0
## 4 9 14 0 0
## 5 12 26 0 0
## 6 6 29 0 0
Este é equivalente ao código mais detalhado na base de R:
flights[flights$Month == 1 & flights$DayofMonth == 1, ] %>%head
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier
## 5424 2011 1 1 6 1400 1500 AA
## 6343 2011 1 1 6 728 840 AA
## 19266 2011 1 1 6 1631 1736 AA
## 23655 2011 1 1 6 1756 2112 AA
## 33051 2011 1 1 6 1012 1347 AA
## 35256 2011 1 1 6 1211 1325 AA
## FlightNum TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin
## 5424 428 N576AA 60 40 -10 0 IAH
## 6343 460 N520AA 72 41 5 8 IAH
## 19266 1121 N4WVAA 65 37 -9 1 IAH
## 23655 1294 N3DGAA 136 113 -3 1 IAH
## 33051 1700 N3DAAA 155 117 7 -8 IAH
## 35256 1820 N593AA 74 39 15 6 IAH
## Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 5424 DFW 224 7 13 0 0
## 6343 DFW 224 6 25 0 0
## 19266 DFW 224 16 12 0 0
## 23655 MIA 964 9 14 0 0
## 33051 MIA 964 12 26 0 0
## 35256 DFW 224 6 29 0 0
# Método de assentamento para selecionar colunas e filtro UniqueCarrier e DepDisplay acima de 60 minutos
filter(select(flights, UniqueCarrier, DepDelay), DepDelay > 60) %>%head
## UniqueCarrier DepDelay
## 1 AA 90
## 2 AA 67
## 3 AA 74
## 4 AA 125
## 5 AA 82
## 6 AA 99
# método de encadeamento
flights %>%
select(UniqueCarrier, DepDelay) %>%
filter(DepDelay > 60) %>%head
## UniqueCarrier DepDelay
## 1 AA 90
## 2 AA 67
## 3 AA 74
## 4 AA 125
## 5 AA 82
## 6 AA 99
filter () funciona de forma semelhante para o subconjunto () exceto que você pode dar qualquer número de condições de filtragem, que são unidas em conjunto com & (não && que é fácil de fazer acidentalmente!). Você também pode usar outros operadores booleanos:
filter(flights, Month == 1 | Month == 2) %>%head
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 1 2011 1 1 6 1400 1500 AA 428
## 2 2011 1 2 7 1401 1501 AA 428
## 3 2011 1 3 1 1352 1502 AA 428
## 4 2011 1 4 2 1403 1513 AA 428
## 5 2011 1 5 3 1405 1507 AA 428
## 6 2011 1 6 4 1359 1503 AA 428
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 1 N576AA 60 40 -10 0 IAH DFW 224
## 2 N557AA 60 45 -9 1 IAH DFW 224
## 3 N541AA 70 48 -8 -8 IAH DFW 224
## 4 N403AA 70 39 3 3 IAH DFW 224
## 5 N492AA 62 44 -3 5 IAH DFW 224
## 6 N262AA 64 45 -7 -1 IAH DFW 224
## TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 1 7 13 0 0
## 2 6 9 0 0
## 3 5 17 0 0
## 4 9 22 0 0
## 5 9 9 0 0
## 6 6 13 0 0
# Para selecionar linhas de posição, o uso slice ():
slice(flights, 1:10) %>%head
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 1 2011 1 1 6 1400 1500 AA 428
## 2 2011 1 2 7 1401 1501 AA 428
## 3 2011 1 3 1 1352 1502 AA 428
## 4 2011 1 4 2 1403 1513 AA 428
## 5 2011 1 5 3 1405 1507 AA 428
## 6 2011 1 6 4 1359 1503 AA 428
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 1 N576AA 60 40 -10 0 IAH DFW 224
## 2 N557AA 60 45 -9 1 IAH DFW 224
## 3 N541AA 70 48 -8 -8 IAH DFW 224
## 4 N403AA 70 39 3 3 IAH DFW 224
## 5 N492AA 62 44 -3 5 IAH DFW 224
## 6 N262AA 64 45 -7 -1 IAH DFW 224
## TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 1 7 13 0 0
## 2 6 9 0 0
## 3 5 17 0 0
## 4 9 22 0 0
## 5 9 9 0 0
## 6 6 13 0 0
``` ###Arrange rows with arrange()
Arrange() funciona da mesma forma que o filter(), exceto que em vez de filtragem ou linhas selecionando, que reordena-los. É preciso um data frame, e um conjunto de nomes de colunas (ou expressões mais complicadas) para ordenar por. Se você fornecer mais de um nome de coluna, cada coluna adicional será usada para quebrar os laços nos valores das colunas precedentes:
arrange(flights, Year, Month, DayofMonth) %>%head
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 1 2011 1 1 6 1400 1500 AA 428
## 2 2011 1 1 6 728 840 AA 460
## 3 2011 1 1 6 1631 1736 AA 1121
## 4 2011 1 1 6 1756 2112 AA 1294
## 5 2011 1 1 6 1012 1347 AA 1700
## 6 2011 1 1 6 1211 1325 AA 1820
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 1 N576AA 60 40 -10 0 IAH DFW 224
## 2 N520AA 72 41 5 8 IAH DFW 224
## 3 N4WVAA 65 37 -9 1 IAH DFW 224
## 4 N3DGAA 136 113 -3 1 IAH MIA 964
## 5 N3DAAA 155 117 7 -8 IAH MIA 964
## 6 N593AA 74 39 15 6 IAH DFW 224
## TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 1 7 13 0 0
## 2 6 25 0 0
## 3 16 12 0 0
## 4 9 14 0 0
## 5 12 26 0 0
## 6 6 29 0 0
# Base de abordagem R para selecionar UniqueCarrier e DepDelay e classificar por DepDelay
arrange(flights, DepDelay, UniqueCarrier, DepDelay) %>%head
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 1 2011 12 24 6 1112 1314 OO 5440
## 2 2011 2 14 1 1917 2027 MQ 3328
## 3 2011 4 10 7 2101 2206 XE 2669
## 4 2011 8 3 3 1741 1810 XE 2603
## 5 2011 1 18 2 1542 1936 CO 1688
## 6 2011 10 4 2 1438 1813 EV 5412
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 1 N728SK 182 131 -25 -33 IAH ASE 913
## 2 N648MQ 70 49 -23 -23 HOU DFW 247
## 3 N13908 65 44 -12 -19 IAH DFW 224
## 4 N11107 89 73 -40 -19 IAH HOB 501
## 5 N27610 174 139 -17 -18 IAH DTW 1076
## 6 N134EV 155 139 -31 -18 IAH DTW 1075
## TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 1 3 48 0 0
## 2 10 11 0 0
## 3 6 15 0 0
## 4 5 11 0 0
## 5 7 28 0 0
## 6 4 12 0 0
#ou método de encadeamento
flights %>%
select(UniqueCarrier, DepDelay) %>%
arrange(DepDelay) %>% head
## UniqueCarrier DepDelay
## 1 OO -33
## 2 MQ -23
## 3 XE -19
## 4 XE -19
## 5 CO -18
## 6 EV -18
# Use desc () para ordenar uma coluna em ordem decrescente:
arrange(flights, desc(ArrDelay)) %>%head
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 1 2011 12 12 1 650 808 AA 1740
## 2 2011 8 1 1 156 452 CO 1
## 3 2011 11 8 2 721 948 MQ 3786
## 4 2011 6 21 2 2334 124 UA 855
## 5 2011 5 20 5 858 1027 MQ 3328
## 6 2011 6 9 4 2029 2243 MQ 3859
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 1 N473AA 78 49 978 970 IAH DFW 224
## 2 N69063 476 461 957 981 IAH HNL 3904
## 3 N502MQ 147 120 918 931 IAH ORD 925
## 4 N670UA 230 216 861 869 IAH SFO 1635
## 5 N609MQ 89 55 822 803 HOU DFW 247
## 6 N6EAMQ 134 117 793 814 IAH ORD 925
## TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 1 14 15 0 0
## 2 5 10 0 0
## 3 9 18 0 0
## 4 3 11 0 0
## 5 10 24 0 0
## 6 9 8 0 0
#ou pelo método de cadeia
flights %>%
select(UniqueCarrier, DepDelay) %>%
arrange(desc(DepDelay)) %>%head
## UniqueCarrier DepDelay
## 1 CO 981
## 2 AA 970
## 3 MQ 931
## 4 UA 869
## 5 MQ 814
## 6 MQ 803
O código anterior é equivalente a:
flights[order(flights$Year, flights$Month, flights$DayofMonth), ] %>%head
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier
## 5424 2011 1 1 6 1400 1500 AA
## 6343 2011 1 1 6 728 840 AA
## 19266 2011 1 1 6 1631 1736 AA
## 23655 2011 1 1 6 1756 2112 AA
## 33051 2011 1 1 6 1012 1347 AA
## 35256 2011 1 1 6 1211 1325 AA
## FlightNum TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin
## 5424 428 N576AA 60 40 -10 0 IAH
## 6343 460 N520AA 72 41 5 8 IAH
## 19266 1121 N4WVAA 65 37 -9 1 IAH
## 23655 1294 N3DGAA 136 113 -3 1 IAH
## 33051 1700 N3DAAA 155 117 7 -8 IAH
## 35256 1820 N593AA 74 39 15 6 IAH
## Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 5424 DFW 224 7 13 0 0
## 6343 DFW 224 6 25 0 0
## 19266 DFW 224 16 12 0 0
## 23655 MIA 964 9 14 0 0
## 33051 MIA 964 12 26 0 0
## 35256 DFW 224 6 29 0 0
flights[order(flights$ArrDelay, decreasing = TRUE), ] %>%head #ou
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier
## 5622757 2011 12 12 1 650 808 AA
## 4086711 2011 8 1 1 156 452 CO
## 5457943 2011 11 8 2 721 948 MQ
## 2843667 2011 6 21 2 2334 124 UA
## 2479980 2011 5 20 5 858 1027 MQ
## 3016449 2011 6 9 4 2029 2243 MQ
## FlightNum TailNum ActualElapsedTime AirTime ArrDelay DepDelay
## 5622757 1740 N473AA 78 49 978 970
## 4086711 1 N69063 476 461 957 981
## 5457943 3786 N502MQ 147 120 918 931
## 2843667 855 N670UA 230 216 861 869
## 2479980 3328 N609MQ 89 55 822 803
## 3016449 3859 N6EAMQ 134 117 793 814
## Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode
## 5622757 IAH DFW 224 14 15 0
## 4086711 IAH HNL 3904 5 10 0
## 5457943 IAH ORD 925 9 18 0
## 2843667 IAH SFO 1635 3 11 0
## 2479980 HOU DFW 247 10 24 0
## 3016449 IAH ORD 925 9 8 0
## Diverted
## 5622757 0
## 4086711 0
## 5457943 0
## 2843667 0
## 2479980 0
## 3016449 0
flights[order(-flights$ArrDelay), ] %>%head
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier
## 5622757 2011 12 12 1 650 808 AA
## 4086711 2011 8 1 1 156 452 CO
## 5457943 2011 11 8 2 721 948 MQ
## 2843667 2011 6 21 2 2334 124 UA
## 2479980 2011 5 20 5 858 1027 MQ
## 3016449 2011 6 9 4 2029 2243 MQ
## FlightNum TailNum ActualElapsedTime AirTime ArrDelay DepDelay
## 5622757 1740 N473AA 78 49 978 970
## 4086711 1 N69063 476 461 957 981
## 5457943 3786 N502MQ 147 120 918 931
## 2843667 855 N670UA 230 216 861 869
## 2479980 3328 N609MQ 89 55 822 803
## 3016449 3859 N6EAMQ 134 117 793 814
## Origin Dest Distance TaxiIn TaxiOut Cancelled CancellationCode
## 5622757 IAH DFW 224 14 15 0
## 4086711 IAH HNL 3904 5 10 0
## 5457943 IAH ORD 925 9 18 0
## 2843667 IAH SFO 1635 3 11 0
## 2479980 HOU DFW 247 10 24 0
## 3016449 IAH ORD 925 9 8 0
## Diverted
## 5622757 0
## 4086711 0
## 5457943 0
## 2843667 0
## 2479980 0
## 3016449 0
Muitas vezes você trabalhar com grandes conjuntos de dados com muitas colunas, mas apenas alguns são realmente de interesse para você. select() permite-lhe ampliar rapidamente em um subconjunto útil usando operações que normalmente só funcionam em posições variáveis numéricas:
select(flights, DepTime, ArrTime, FlightNum) %>%head
## DepTime ArrTime FlightNum
## 5424 1400 1500 428
## 5425 1401 1501 428
## 5426 1352 1502 428
## 5427 1403 1513 428
## 5428 1405 1507 428
## 5429 1359 1503 428
select(flights, Year, Month, DayofMonth) %>%head
## Year Month DayofMonth
## 5424 2011 1 1
## 5425 2011 1 2
## 5426 2011 1 3
## 5427 2011 1 4
## 5428 2011 1 5
## 5429 2011 1 6
select(flights, Year:DayofMonth) %>%head
## Year Month DayofMonth
## 5424 2011 1 1
## 5425 2011 1 2
## 5426 2011 1 3
## 5427 2011 1 4
## 5428 2011 1 5
## 5429 2011 1 6
select(flights, -(Year:DayofMonth)) %>%head
## DayOfWeek DepTime ArrTime UniqueCarrier FlightNum TailNum
## 5424 6 1400 1500 AA 428 N576AA
## 5425 7 1401 1501 AA 428 N557AA
## 5426 1 1352 1502 AA 428 N541AA
## 5427 2 1403 1513 AA 428 N403AA
## 5428 3 1405 1507 AA 428 N492AA
## 5429 4 1359 1503 AA 428 N262AA
## ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 5424 60 40 -10 0 IAH DFW 224
## 5425 60 45 -9 1 IAH DFW 224
## 5426 70 48 -8 -8 IAH DFW 224
## 5427 70 39 3 3 IAH DFW 224
## 5428 62 44 -3 5 IAH DFW 224
## 5429 64 45 -7 -1 IAH DFW 224
## TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 5424 7 13 0 0
## 5425 6 9 0 0
## 5426 5 17 0 0
## 5427 9 22 0 0
## 5428 9 9 0 0
## 5429 6 13 0 0
#Seleciona somente as variáveis cujo nome contem o texto especificado
select(flights, Year:DayofMonth, contains("Taxi"), contains("Delay")) %>% head
## Year Month DayofMonth TaxiIn TaxiOut ArrDelay DepDelay
## 5424 2011 1 1 7 13 -10 0
## 5425 2011 1 2 6 9 -9 1
## 5426 2011 1 3 5 17 -8 -8
## 5427 2011 1 4 9 22 3 3
## 5428 2011 1 5 9 9 -3 5
## 5429 2011 1 6 6 13 -7 -1
# Você pode renomear variáveis com select () usando argumentos nomeados:
select(flights, tail_num = TailNum) %>%head
## tail_num
## 5424 N576AA
## 5425 N557AA
## 5426 N541AA
## 5427 N403AA
## 5428 N492AA
## 5429 N262AA
# Mas porque select() elimina todas as variáveis não explicitamente mencionadas, não é assim tão útil. Em vez disso, o uso rename():
rename(flights, tail_num = TailNum) %>%head
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier
## 5424 2011 1 1 6 1400 1500 AA
## 5425 2011 1 2 7 1401 1501 AA
## 5426 2011 1 3 1 1352 1502 AA
## 5427 2011 1 4 2 1403 1513 AA
## 5428 2011 1 5 3 1405 1507 AA
## 5429 2011 1 6 4 1359 1503 AA
## FlightNum tail_num ActualElapsedTime AirTime ArrDelay DepDelay Origin
## 5424 428 N576AA 60 40 -10 0 IAH
## 5425 428 N557AA 60 45 -9 1 IAH
## 5426 428 N541AA 70 48 -8 -8 IAH
## 5427 428 N403AA 70 39 3 3 IAH
## 5428 428 N492AA 62 44 -3 5 IAH
## 5429 428 N262AA 64 45 -7 -1 IAH
## Dest Distance TaxiIn TaxiOut Cancelled CancellationCode Diverted
## 5424 DFW 224 7 13 0 0
## 5425 DFW 224 6 9 0 0
## 5426 DFW 224 5 17 0 0
## 5427 DFW 224 9 22 0 0
## 5428 DFW 224 9 9 0 0
## 5429 DFW 224 6 13 0 0
Use distinct () para encontrar valores exclusivos em uma tabela:
distinct(flights, TailNum) %>%head
## TailNum
## 1 N576AA
## 2 N557AA
## 3 N541AA
## 4 N403AA
## 5 N492AA
## 6 N262AA
distinct(flights, Origin, Dest=="GIG") %>%head
## Origin Dest == "GIG"
## 1 IAH FALSE
## 2 HOU FALSE
Além de selecionar conjuntos de colunas existentes, muitas vezes é útil para adicionar novas colunas que são funções de colunas existentes. Este é o trabalho de mutate ():
mutate(flights,
gain = ArrDelay - DepDelay,
speed = Distance / AirTime * 60) %>%head
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 1 2011 1 1 6 1400 1500 AA 428
## 2 2011 1 2 7 1401 1501 AA 428
## 3 2011 1 3 1 1352 1502 AA 428
## 4 2011 1 4 2 1403 1513 AA 428
## 5 2011 1 5 3 1405 1507 AA 428
## 6 2011 1 6 4 1359 1503 AA 428
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 1 N576AA 60 40 -10 0 IAH DFW 224
## 2 N557AA 60 45 -9 1 IAH DFW 224
## 3 N541AA 70 48 -8 -8 IAH DFW 224
## 4 N403AA 70 39 3 3 IAH DFW 224
## 5 N492AA 62 44 -3 5 IAH DFW 224
## 6 N262AA 64 45 -7 -1 IAH DFW 224
## TaxiIn TaxiOut Cancelled CancellationCode Diverted gain speed
## 1 7 13 0 0 -10 336.0000
## 2 6 9 0 0 -10 298.6667
## 3 5 17 0 0 0 280.0000
## 4 9 22 0 0 0 344.6154
## 5 9 9 0 0 -8 305.4545
## 6 6 13 0 0 -6 298.6667
# A abordagem com dplyr (imprime a nova variável, mas não a armazena)
flights %>%
select(Distance, AirTime) %>%
mutate(Speed = Distance/AirTime*60) %>%head
## Distance AirTime Speed
## 1 224 40 336.0000
## 2 224 45 298.6667
## 3 224 48 280.0000
## 4 224 39 344.6154
## 5 224 44 305.4545
## 6 224 45 298.6667
# Armazena uma nova variável
flights <- flights %>% mutate(Speed = Distance/AirTime*60) %>%head
A principal diferença entre a mutate () e transform () é que mutate() permite que você se referira as colunas que você acabou de criar:
mutate(flights,
gain = ArrDelay - DepDelay,
gain_per_hour = gain / (AirTime / 60) %>%head
)
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 1 2011 1 1 6 1400 1500 AA 428
## 2 2011 1 2 7 1401 1501 AA 428
## 3 2011 1 3 1 1352 1502 AA 428
## 4 2011 1 4 2 1403 1513 AA 428
## 5 2011 1 5 3 1405 1507 AA 428
## 6 2011 1 6 4 1359 1503 AA 428
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 1 N576AA 60 40 -10 0 IAH DFW 224
## 2 N557AA 60 45 -9 1 IAH DFW 224
## 3 N541AA 70 48 -8 -8 IAH DFW 224
## 4 N403AA 70 39 3 3 IAH DFW 224
## 5 N492AA 62 44 -3 5 IAH DFW 224
## 6 N262AA 64 45 -7 -1 IAH DFW 224
## TaxiIn TaxiOut Cancelled CancellationCode Diverted Speed gain
## 1 7 13 0 0 336.0000 -10
## 2 6 9 0 0 298.6667 -10
## 3 5 17 0 0 280.0000 0
## 4 9 22 0 0 344.6154 0
## 5 9 9 0 0 305.4545 -8
## 6 6 13 0 0 298.6667 -6
## gain_per_hour
## 1 -15.00000
## 2 -13.33333
## 3 0.00000
## 4 0.00000
## 5 -10.90909
## 6 -8.00000
#Deverá gerar um erro
Se você só quer manter as novas variáveis, utilize transmute():
transmute(flights,
gain = ArrDelay - DepDelay,
gain_per_hour = gain / (AirTime / 60)
) %>%head
## gain gain_per_hour
## 1 -10 -15.00000
## 2 -10 -13.33333
## 3 0 0.00000
## 4 0 0.00000
## 5 -8 -10.90909
## 6 -6 -8.00000
O último verbo é summarise(). Ele recolhe um data frame a uma única linha (este é exatamente equivalente a plyr :: summarise ()) group_by cria os grupos que serão operados. summarise utiliza a função de agregação fornecida para resumir cada grupo.
summarise(flights,
delay = mean(DepDelay, na.rm = TRUE))
## delay
## 1 0
Você pode utilizar sample_n() and sample_frac() para gerar uma amostra aleatória de registros: utilize sample_n() para um número fixo e sample_frac() para uma fração fixa.
sample_n(flights, 5)
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 2 2011 1 2 7 1401 1501 AA 428
## 4 2011 1 4 2 1403 1513 AA 428
## 6 2011 1 6 4 1359 1503 AA 428
## 5 2011 1 5 3 1405 1507 AA 428
## 3 2011 1 3 1 1352 1502 AA 428
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 2 N557AA 60 45 -9 1 IAH DFW 224
## 4 N403AA 70 39 3 3 IAH DFW 224
## 6 N262AA 64 45 -7 -1 IAH DFW 224
## 5 N492AA 62 44 -3 5 IAH DFW 224
## 3 N541AA 70 48 -8 -8 IAH DFW 224
## TaxiIn TaxiOut Cancelled CancellationCode Diverted Speed
## 2 6 9 0 0 298.6667
## 4 9 22 0 0 344.6154
## 6 6 13 0 0 298.6667
## 5 9 9 0 0 305.4545
## 3 5 17 0 0 280.0000
sample_frac(flights, 0.01)
## [1] Year Month DayofMonth
## [4] DayOfWeek DepTime ArrTime
## [7] UniqueCarrier FlightNum TailNum
## [10] ActualElapsedTime AirTime ArrDelay
## [13] DepDelay Origin Dest
## [16] Distance TaxiIn TaxiOut
## [19] Cancelled CancellationCode Diverted
## [22] Speed
## <0 rows> (or 0-length row.names)
Use replace = TRUE para executar uma amostra de bootstrap. Se necessário, você pode pesar a amostra com o argumento de peso.
#A abordagem com dplyr: criar uma tabela agrupados por Dest, e depois resumir cada grupo tomando a média de ArrDelay
flights %>%
group_by(Dest) %>%
summarise(avg_delay = mean(ArrDelay, na.rm=TRUE))
## # A tibble: 1 × 2
## Dest avg_delay
## <chr> <dbl>
## 1 DFW -5.666667
# Para cada operadora, calcule o atraso máximo e mínimo em partidas e chegadas
flights %>%
group_by(UniqueCarrier) %>%
summarise_each(funs(min(., na.rm=TRUE), max(., na.rm=TRUE)), matches("Delay"))
## # A tibble: 1 × 5
## UniqueCarrier ArrDelay_min DepDelay_min ArrDelay_max DepDelay_max
## <chr> <int> <int> <int> <int>
## 1 AA -10 -8 3 5
#A função n () conta o número de linhas em um grupo
#A função n_distinct (vector) conta o número de itens exclusivos nesse vector
# Para cada dia do ano, contar o número total de voos, e classificar em ordem decrescente
flights %>%
group_by(Month, DayofMonth) %>%
summarise(flight_count = n()) %>%
arrange(desc(flight_count))
## Source: local data frame [6 x 3]
## Groups: Month [1]
##
## Month DayofMonth flight_count
## <int> <int> <int>
## 1 1 1 1
## 2 1 2 1
## 3 1 3 1
## 4 1 4 1
## 5 1 5 1
## 6 1 6 1
# Para cada destino, contar o número total de voos eo número de planos distintos que voavam lá
flights %>%
group_by(Dest) %>%
summarise(flight_count = n(), plane_count = n_distinct(TailNum))
## # A tibble: 1 × 3
## Dest flight_count plane_count
## <chr> <int> <int>
## 1 DFW 6 6
# Para cada destino, mostram o número de vôos cancelados e Não cancelada
flights %>%
group_by(Dest) %>%
select(Cancelled) %>%
table() %>%head
## Adding missing grouping variables: `Dest`
## Cancelled
## Dest 0
## DFW 6
função de aggregate (como média) tem n entradas e retorna 1 valor Função de janela tem n entradas e retorna n valores
Inclui funções de ranking e ordenação (como min_rank), compensado funções (lead e lag), e agregações acumuladas (como cummean).
by_tailnum <- group_by(flights, TailNum)
delay <- summarise(by_tailnum,
count = n(),
dist = mean(Distance, na.rm = TRUE),
delay = mean(ArrDelay, na.rm = TRUE))
delay <- filter(delay, count > 20, dist < 2000)
# Para cada operadora, calcule qual dos dois dias do ano eles tinham seus maiores atrasos de partida.
# Nota: O valor menor (e não maior) é classificado como 1, então você tem que usar "desc" para classificar pelo maior valor
#2 para cada grupo
flights %>%
group_by(UniqueCarrier) %>%
select(Month, DayofMonth, DepDelay) %>%
filter(min_rank(desc(DepDelay)) <= 2) %>%
arrange(UniqueCarrier, desc(DepDelay)) %>%head
## Adding missing grouping variables: `UniqueCarrier`
## Source: local data frame [2 x 4]
## Groups: UniqueCarrier [1]
##
## UniqueCarrier Month DayofMonth DepDelay
## <chr> <int> <int> <int>
## 1 AA 1 5 5
## 2 AA 1 4 3
# Reescrito de maneira mais simples usando a função top_n
flights %>%
group_by(UniqueCarrier) %>%
select(Month, DayofMonth, DepDelay) %>%
top_n(2) %>%
arrange(UniqueCarrier, desc(DepDelay)) %>%head
## Adding missing grouping variables: `UniqueCarrier`
## Selecting by DepDelay
## Source: local data frame [2 x 4]
## Groups: UniqueCarrier [1]
##
## UniqueCarrier Month DayofMonth DepDelay
## <chr> <int> <int> <int>
## 1 AA 1 5 5
## 2 AA 1 4 3
# Maiores Atrasos na Partida
top_n(flights, 2, flights$DepDelay)
## Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
## 1 2011 1 4 2 1403 1513 AA 428
## 2 2011 1 5 3 1405 1507 AA 428
## TailNum ActualElapsedTime AirTime ArrDelay DepDelay Origin Dest Distance
## 1 N403AA 70 39 3 3 IAH DFW 224
## 2 N492AA 62 44 -3 5 IAH DFW 224
## TaxiIn TaxiOut Cancelled CancellationCode Diverted Speed
## 1 9 22 0 0 344.6154
## 2 9 9 0 0 305.4545
first(flights$Distance)
## [1] 224