• Aucun résultat trouvé

Création, conversion

Dans le document Notes de cours de R - Version 2 (Page 140-148)

2.4 Manipulation des données

2.4.7 Data tables

2.4.7.1 Création, conversion

La création d’undata.table se fait de manière analogue à ce que l’on utilise pour untibble, en faisant appel à la fonction data.table().

chomage

<-data.table(region = rep(c(rep("Bretagne", 4), rep("Corse", 2)), 2), departement = rep(c("Cotes-d'Armor", "Finistere",

"Ille-et-Vilaine", "Morbihan",

"Corse-du-Sud", "Haute-Corse"), 2), annee = rep(c(2011, 2010), each = 6),

ouvriers = c(8738, 12701, 11390, 10228, 975, 1297, 8113, 12258, 10897, 9617, 936, 1220), ingenieurs = c(1420, 2530, 3986, 2025, 259, 254,

1334, 2401, 3776, 1979, 253, 241)) chomage

## region departement annee ouvriers ingenieurs

## 1: Bretagne Cotes -d’Armor 2011 8738 1420

## 2: Bretagne Finistere 2011 12701 2530

## 3: Bretagne Ille -et - Vilaine 2011 11390 3986

## 4: Bretagne Morbihan 2011 10228 2025

## 5: Corse Corse -du - Sud 2011 975 259

## 6: Corse Haute - Corse 2011 1297 254

## 7: Bretagne Cotes -d’Armor 2010 8113 1334

## 8: Bretagne Finistere 2010 12258 2401

## 9: Bretagne Ille -et - Vilaine 2010 10897 3776

## 10: Bretagne Morbihan 2010 9617 1979

## 11: Corse Corse -du - Sud 2010 936 253

## 12: Corse Haute - Corse 2010 1220 241

Il est facile de convertir un tibble en data.table, en faiant appel à la même fonction.

pop

<-tibble(region = rep(c("Bretagne", "Alsace"), each = 2), annee = rep(c(2010, 2011), 2),

population = c(3199066, 3217767, 1845687, 1852325)) population <- data.table(pop)

population

## region annee population

## 1: Bretagne 2010 3199066

## 2: Bretagne 2011 3217767

## 3: Alsace 2010 1845687

## 4: Alsace 2011 1852325

La fonctiontables() donne un aperçu desdata.tables en mémoire.

tables()

## NAME NROW NCOL MB

COLS KEY

## 1: chomage 12 5 0 region , departement ,annee , ouvriers , ingenieurs

## 2: population 4 3 0 region ,annee ,

population

## Total : 0MB

La fonction as_tibble() convertit les data.table en tibble, ce qui est essentiel, dans la mesure où certaines fonctions ne prennent en compte qu’un objet tibble ou data.frame en argument, et excluent toute autre structure.

2.4.7.2 Sélection

Comme pour untibble, on peut accéder aux éléments par leur numéro de ligne. En revanche, l’accès par le numéro de colonne ne fonctionne pas comme avec une matrice ou un tibble.

chomage[1,]

## region departement annee ouvriers ingenieurs

## 1: Bretagne Cotes -d’Armor 2011 8738 1420

# Retourne un résultat pas forcément attendu chomage[,1]

## region

## 1: Bretagne

## 2: Bretagne

## 3: Bretagne

## 4: Bretagne

## 5: Corse

## 6: Corse

## 7: Bretagne

## 8: Bretagne

## 9: Bretagne

## 10: Bretagne

## 11: Corse

## 12: Corse

chomage[1,1]

## region

## 1: Bretagne

Pour accéder aux valeurs dans les colonnes, il faut fournir le nom de la colonne, sans guillemets en second argument à la fonction "[.data.table"(). Pour choisir plusieurs colonnes, il faut placer le nom des variables, sans guillemets, dans une liste, et le fournir en second argument de la fonction"[.data.table"().

chomage[1,ouvriers]

## [1] 8738

chomage[1, list(ouvriers, ingenieurs)]

## ouvriers ingenieurs

## 1: 8738 1420

2.4.7.3 Filtrage

On peut extraire des sous parties dudata.tableà l’aide des opérateurs logiques qui scannent la totalité des données. Cependant, la Section 2.4.7.5 propose un moyen beaucoup plus rapide, surtout avec des gros volumes de données, pour effectuer des recherches dans un data.table.

chomage[annee == 2010 & departement %in% c("Finistere", "Morbihan"), list(departement, ouvriers, annee)]

## departement ouvriers annee

## 1: Finistere 12258 2010

## 2: Morbihan 9617 2010

2.4.7.4 Retirer les valeurs dupliquées

Il arrive parfois, après avoir effectué des opérations sur les tables, d’obtenir des duplica-tions d’enregistrement. Comme pour les data.frames ou les tibbles, il faut se servir de la fonction unique()pour retirer les doublons. Attention, si ledata.table possède une clé, il est nécessaire de la retirer avant d’appeler la fonction unique().

# Les observations 1 et 7, ainsi que 3 et 6 sont dupliquées dt <- data.table(x = letters[c(1,2,3,1,4,3,1)],

y = letters[c(1,5,2,4,3,2,1)])

# setkey(dt, NULL)

Dans les bases de données relationnelles, la présence d’une clé primaire permet d’identifier chaque observation de la base. Celle-ci peut être composée d’un seul ou de plusieurs champs.

Ici, avec les data.table, il en est à peu près de même. Une clé (key) peut être composée d’une seule ou de plusieurs variables (colonnes) du data.table, qui peuvent être de mode factor,numeric,integer,character, etc. Les lignes sont ordonnées en fonction de la clé, ce qui implique l’impossibilité d’avoir plusieurs clés. Les clés dupliquées sont autorisées.

Pour définir une clé, on peut utiliser la fonction setkey().

setkey(chomage, departement) tables()

## NAME NROW NCOL MB

## 1: chomage 12 5 0 region , departement ,annee , ouvriers ,COLS ingenieurs

Comme précisé plus haut, on peut voir à présent que ledata.tablea été ordonné en fonction de la clé.

chomage

## region departement annee ouvriers ingenieurs

## 1: Corse Corse -du - Sud 2011 975 259

## 2: Corse Corse -du - Sud 2010 936 253

## 3: Bretagne Cotes -d’Armor 2011 8738 1420

## 4: Bretagne Cotes -d’Armor 2010 8113 1334

## 5: Bretagne Finistere 2011 12701 2530

## 6: Bretagne Finistere 2010 12258 2401

## 7: Corse Haute - Corse 2011 1297 254

## 8: Corse Haute - Corse 2010 1220 241

## 9: Bretagne Ille -et - Vilaine 2011 11390 3986

## 10: Bretagne Ille -et - Vilaine 2010 10897 3776

## 11: Bretagne Morbihan 2011 10228 2025

## 12: Bretagne Morbihan 2010 9617 1979

On peut à présent faire référence à une valeur de la clé pour accéder à une information chomage["Finistere",]

## region departement annee ouvriers ingenieurs

## 1: Bretagne Finistere 2011 12701 2530

## 2: Bretagne Finistere 2010 12258 2401

# On n'est pas obligé de mettre la virgule chomage["Finistere"]

## region departement annee ouvriers ingenieurs

## 1: Bretagne Finistere 2011 12701 2530

## 2: Bretagne Finistere 2010 12258 2401

Comme on peut le voir, la clé"departement"est dupliqueée pour la valeur"Finistere". De fait, deux observations sont retournées. Si on souhaite obtenir uniquement la première ou la dernière, on peut utiliser l’argument mult, en lui donnant respectivement la valeur

"first" ou "last".

chomage["Finistere", mult = "first"]

## region departement annee ouvriers ingenieurs

## 1: Bretagne Finistere 2011 12701 2530

chomage["Finistere", mult = "last"]

## region departement annee ouvriers ingenieurs

## 1: Bretagne Finistere 2010 12258 2401

La clé peut être composée de plusieurs variables, il faut utiliser la fonction J(). setkey(chomage, region, departement)

tables()

## NAME NROW NCOL MB

## 1: chomage 12 5 0 region , departement ,annee , ouvriers ,COLS ingenieurs

## 2: dt 7 2 0

## 3: population 4 3 0 x,y region ,annee ,

population

## KEY

## 1: region , departement

## 2:

## 3:

## Total : 0MB

chomage["Corse"]

## region departement annee ouvriers ingenieurs

## 1: Corse Corse -du - Sud 2011 975 259

## 2: Corse Corse -du - Sud 2010 936 253

## 3: Corse Haute - Corse 2011 1297 254

## 4: Corse Haute - Corse 2010 1220 241

chomage[J("Bretagne", "Finistere")]

## region departement annee ouvriers ingenieurs

## 1: Bretagne Finistere 2011 12701 2530

## 2: Bretagne Finistere 2010 12258 2401

À l’heure de la rédaction de la première version de ces notes, il n’existait pas encore de moyen de faire une recherche par clé secondaire (cela semble être à présent possible, comme le montrecette vignette dupackage). Il était cependant possible de contourner le problème en effectuant de nouveau l’opération de définition de clé.

# Pour rechercher les observations pour lesquelles le département

# est le Finistere, sans savoir que c'est en Bretagne

# Ne fonctionne pas chomage["Finistere"]

## region departement annee ouvriers ingenieurs

## 1: Finistere <NA > NA NA NA

setkey(chomage, departement) chomage["Finistere"]

## region departement annee ouvriers ingenieurs

## 1: Bretagne Finistere 2011 12701 2530

## 2: Bretagne Finistere 2010 12258 2401

# Retour à la clé précédente

setkey(chomage, region, departement)

Dans le document Notes de cours de R - Version 2 (Page 140-148)