Filtrando linhas em um data.table

Manipulação de dados com data.table em R

Matt Dowle and Arun Srinivasan

Instructors, DataCamp

Forma geral da sintaxe de data.table

O primeiro argumento i é usado para subconjuntar ou filtrar linhas

# Forma geral da sintaxe de data.table
DT[i, j, by]
   |  |  |
   |  |  --> agrupar por quê?
   |  -----> o que fazer?
   --------> em quais linhas?
Manipulação de dados com data.table em R

Números de linha

# Subconjunte as 3ª e 4ª linhas de batrips
batrips[3:4]

# Mesmo que
batrips[3:4, ]
# Subconjunte tudo, exceto as cinco primeiras linhas
batrips[-(1:5)] 

# Mesmo que
batrips[!(1:5)]
Manipulação de dados com data.table em R

Símbolo especial .N

  • .N é um inteiro com o número de linhas do data.table
  • Alternativa útil a nrow(x) em i
nrow(batrips) 
326339
batrips[326339]
trip_id duration
588914      364
# Retorna a última linha
batrips[.N] 
trip_id duration
588914      364
# Retorne todas, exceto as últimas 10 linhas
ans <- batrips[1:(.N-10)] 
nrow(ans)
326329
Manipulação de dados com data.table em R

Expressões lógicas (I)

# Subconjunte linhas onde subscription_type é "Subscriber"
batrips[subscription_type == "Subscriber"]

# Se batrips fosse apenas um data frame
batrips[batrips$subscription_type == "Subscriber", ]
Manipulação de dados com data.table em R

Expressões lógicas (II)

# Subconjunte linhas onde start_terminal = 58 e end_terminal não é 65
batrips[start_terminal == 58 & end_terminal != 65]

# Se batrips fosse apenas um data frame
batrips[batrips$start_terminal == 58 & batrips$end_terminal != 65]
Manipulação de dados com data.table em R

Expressões lógicas (III)

Otimizado automaticamente com índices secundários para mais rapidez

set.seed(1)
dt <- data.table(x = sample(10000, 10e6, TRUE), 
                 y = sample(letters, 1e6, TRUE))
indices(dt)
NULL
# 0,207s na primeira execução 
# (tempo para criar o índice + subconjunto)
system.time(dt[x == 900])
user  system elapsed 
0.207   0.015   0.226 
indices(dt)
"x"
# 0,002s nas execuções seguintes
# (subconjunto instantâneo usando o índice)
system.time(dt[x == 900])
user  system elapsed 
0.002   0.000   0.002
Manipulação de dados com data.table em R

Vamos praticar!

Manipulação de dados com data.table em R

Preparing Video For Download...