Ajouter et mettre à jour des colonnes par référence

Manipulation de données avec data.table en R

Matt Dowle, Arun Srinivasan

Instructors, DataCamp

Internes de data.frame

Disons que vous voulez changer la 2e ligne de la colonne « y » à 10

df <- data.frame(x = 1:5, y = 6:10)
df
x  y
1  6
2  7
df$y[2] <- 10
Manipulation de données avec data.table en R

Internes de data.frame

Dans R < v3.1.0, cette opération faisait une copie profonde de tout le data.frame

# ce qui se passe en interne avant R v3.1.0
tmp <- <deep copy of "df">
tmp$y[2] <- 10
df <- tmp
  • Que se passe-t-il si vous faites la même opération sur un data.frame de 10 Go ?
Manipulation de données avec data.table en R

Internes de data.frame

  • En v3.1.0, des améliorations ont permis de copier en profondeur seulement la colonne mise à jour

  • Ici, seules les colonnes a et b sont copiées en profondeur dans l'opération ci-dessous sur 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
Manipulation de données avec data.table en R

Internes de data.table

  • data.table met à jour les colonnes sur place, c'est‑à‑dire par référence

  • Vous n'avez donc pas à réassigner le résultat à une variable

  • Aucune copie de colonne n'est faite pendant la modification des valeurs

  • data.table utilise le nouvel opérateur := pour ajouter/mettre à jour/supprimer des colonnes par référence

Manipulation de données avec data.table en R

Forme LHS := RHS

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

# Pour ajouter une seule colonne, les guillemets ne sont pas nécessaires batrips[, is_dur_gt_1hour := duration > 3600]
Manipulation de données avec data.table en R

Forme fonctionnelle

batrips[, `:=`(is_dur_gt_1hour = NULL,                  
               start_station = toupper(start_station))] 
Manipulation de données avec data.table en R

Passons à la pratique !

Manipulation de données avec data.table en R

Preparing Video For Download...