Adicionando e atualizando colunas por referência

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

Matt Dowle, Arun Srinivasan

Instructors, DataCamp

Internos de data.frame

Digamos que queremos mudar a 2ª linha da coluna "y" para 10

df <- data.frame(x = 1:5, y = 6:10)
df
x  y
1  6
2  7
df$y[2] <- 10
Manipulação de dados com data.table em R

Internos de data.frame

No R < v3.1.0, essa operação fazia uma cópia profunda de todo o data.frame

# o que acontece internamente antes do R v3.1.0
tmp <- <deep copy of "df">
tmp$y[2] <- 10
df <- tmp
  • O que acontece se você quiser fazer o mesmo em um data.frame de 10GB?
Manipulação de dados com data.table em R

Internos de data.frame

  • Na v3.1.0, houve melhorias para copiar profundamente apenas a coluna atualizada

  • Neste caso, só as colunas a e b são copiadas profundamente na operação abaixo em df

df <- data.frame(a = 1:3, b = 4:6, c = 7:9, d = 10:12)
df[1:2] <- lapply(df[1:2], function(x) ifelse(x%%2, x, NA))
df
 a  b c  d
 1 NA 7 10
NA  5 8 11
 3 NA 9 12
Manipulação de dados com data.table em R

Internos de data.table

  • data.table atualiza colunas no lugar, ou seja, por referência

  • Isso significa que você não precisa atribuir o resultado de volta a uma variável

  • Nenhuma coluna é copiada enquanto seus valores são alterados

  • data.table usa o novo operador := para adicionar/atualizar/excluir colunas por referência

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

Forma LHS := RHS

batrips[, c("is_dur_gt_1hour", "week_day") := list(duration > 3600, 
                                                   wday(start_date))]

# Ao adicionar uma única coluna, aspas não são necessárias batrips[, is_dur_gt_1hour := duration > 3600]
Manipulação de dados com data.table em R

Forma funcional

batrips[, `:=`(is_dur_gt_1hour = NULL,                  
               start_station = toupper(start_station))] 
Manipulação de dados com data.table em R

Vamos praticar!

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

Preparing Video For Download...