Recherche…


Remarques

Un data.table est une version améliorée de la classe data.frame de la base R. En tant que tel, son attribut class() est le vecteur "data.table" "data.frame" et les fonctions qui fonctionnent sur un data.frame seront également travailler avec un data.table. Il existe de nombreuses manières de créer, charger ou contraindre à une data.table, comme on le voit ici.

Contraindre un data.frame

Pour copier un data.frame en tant que data.table, utilisez as.data.table ou data.table :

DF = data.frame(x = letters[1:5], y = 1:5, z = (1:5) > 3)

DT <- as.data.table(DF)
# or
DT <- data.table(DF)

Ceci est rarement nécessaire. Une exception est l'utilisation de jeux de données mtcars tels que mtcars , qui doivent être copiés car ils ne peuvent pas être modifiés sur place.

Construire avec data.table ()

Il y a un constructeur du même nom:

DT <- data.table(
  x = letters[1:5], 
  y = 1:5, 
  z = (1:5) > 3
)
#    x y     z
# 1: a 1 FALSE
# 2: b 2 FALSE
# 3: c 3 FALSE
# 4: d 4  TRUE
# 5: e 5  TRUE

Contrairement à data.frame , data.table ne contraindra pas les chaînes aux facteurs par défaut:

sapply(DT, class)
#               x           y           z 
#     "character"   "integer"   "logical" 

Lire avec fread ()

Nous pouvons lire un fichier texte:

dt <- fread("my_file.csv")

Contrairement à read.csv , fread lira les chaînes comme des chaînes, et non comme des facteurs par défaut.

Voir le [topic on fread ] [need_a_link] pour plus d'exemples.

Modifier un data.frame avec setDT ()

Pour plus d'efficacité, data.table offre un moyen de modifier un data.frame ou une liste pour créer un data.table sur place:

# example data.frame
DF = data.frame(x = letters[1:5], y = 1:5, z = (1:5) > 3)

# modification
setDT(DF)

Notez que nous ne <- assignons pas le résultat, puisque l'objet DF a été modifié sur place.

Les attributs de classe du data.frame seront conservés:

sapply(DF, class)
#         x         y         z 
#  "factor" "integer" "logical" 

Copier un autre data.table avec copy ()

# example data
DT1 = data.table(x = letters[1:2], y = 1:2, z = (1:2) > 3)

En raison de la manière dont les data.tables sont manipulées, DT2 <- DT1 ne fera pas de copie. Autrement dit, les modifications ultérieures apportées aux colonnes ou à d'autres attributs de DT2 affecteront également DT1 . Lorsque vous voulez une copie réelle, utilisez

DT2 = copy(DT1)

Pour voir la différence, voici ce qui se passe sans copie:

DT2 <- DT1
DT2[, w := 1:2]

DT1
#    x y     z w
# 1: a 1 FALSE 1
# 2: b 2 FALSE 2
DT2
#    x y     z w
# 1: a 1 FALSE 1
# 2: b 2 FALSE 2

Et avec une copie:

DT2 <- copy(DT1)
DT2[, w := 1:2]

DT1
#    x y     z
# 1: a 1 FALSE
# 2: b 2 FALSE
DT2
#    x y     z w
# 1: a 1 FALSE 1
# 2: b 2 FALSE 2

Les modifications ne se propagent donc pas dans ce dernier cas.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow