Manipulação de dados com data.table em R
Matt Dowle, Arun Srinivasan
Instructors, DataCamp
O segundo argumento j é usado para selecionar (e calcular em) colunas
# Forma geral da sintaxe de data.table
DT[i, j, by]
| | |
| | --> agrupar por quê?
| -----> o que fazer?
--------> em quais linhas?
O argumento j aceita um vetor de caracteres com nomes de colunas
ans <- batrips[, c("trip_id", "duration")]
head(ans, 2)
trip_id duration
139545 435
139546 432
batrips_df <- as.data.frame(batrips)
ans <- batrips_df[, "trip_id"]
head(ans, 2)
# O resultado é um vetor, não um data.frame
139545, 139546
ans <- batrips[, "trip_id"]
# Ainda é um data.table, não um vetor
head(ans, 2)
trip_id
139545
139546
Números de colunas em vez de nomes também funcionam
ans <- batrips[, c(2, 4)]
head(ans, 2)
duration start_station
435 San Francisco City Hall
432 San Francisco City Hall
Porém, isso é uma má prática
# Se a ordem das colunas mudar, o resultado sai errado
batrips[, c(2, 4)]
# O resultado é sempre correto, independente da ordem
batrips[, c("duration", "start_station")]
-c("col1", "col2", ...) remove as colunas indicadas ! em vez de - funciona igual # Seleciona todas as colunas exceto as abaixo
ans <- batrips[, -c("start_date", "end_date", "end_station")]
head(ans, 1)
trip_id duration start_station start_terminal bike_id end_terminal
139545 435 San Francisco City Hall 58 65 473
subscription_type zip_code
Subscriber 94612
Lembra que as colunas podiam ser usadas como variáveis no argumento i no último capítulo?
# Recapitulando o argumento "i"
# Todas as viagens com mais de uma hora
batrips[duration > 3600]
Da mesma forma, você pode usar uma lista de variáveis (nomes de colunas) para selecionar colunas
ans <- batrips[, list(trip_id, dur = duration)]
head(ans, 2)
trip_id dur
139545 435
139546 432
Ao selecionar uma única coluna, não envolver a variável com list() retorna um vector
# Seleciona uma coluna e retorna um data.table
ans <- batrips[, list(trip_id)]
head(ans ,2)
trip_id
139545
139546
# Seleciona uma coluna e retorna um vetor
ans <- batrips[, trip_id]
head(ans, 2)
139545 139546
.() é um atalho de list(), por conveniência
# .() é o mesmo que list()
ans <- batrips[, .(trip_id, duration)]
head(ans, 2)
trip_id duration
139545 435
139546 432
Manipulação de dados com data.table em R