BL SET Formations en statistique

tests, régressions, apprentissage
logiciel R et Python



Logiciel R perfectionnement

Applications avancées

Opérations avec data table : utiliser le paramètre .SD avec une fonction renvoyant un vecteur ou une liste

aperçu de la séquence

Utilisation de .SD

Le package data.table permet de réaliser des appels de fonction quelconques par groupe de lignes.

L'appel

dt[ j=f(.SD), by=col]

Envoie à la fonction f, une section de dt correspondant à chaque valeur distincte de col. Le résultat en retour dépend de ce que renvoie f.

Exemples avec mtcars

mt= data.table(mtcars)

Fonction renvoyant un vecteur de longueur 1

myrange1 = function(sd){
    a = sd[ j=range(mpg)]
    a[2] - a[1]
}

exemple 1

mt[ j=myrange1(.SD),by="am"]
##    am   V1
## 1:  1 18.9
## 2:  0 14.0

exemple 2

Dans ce cas, SD est optionnel, le code de l'exemple 1 est identique à

mt[ j=max(mpg)-min(mpg),by="am"]
##    am   V1
## 1:  1 18.9
## 2:  0 14.0

Fonction renvoyant un vecteur de longueur > 1

myrange2 = function(sd){
        a = sd[ j=range(mpg)]
    a
}

exemple 3

La fonction myrange2 renvoie un vecteur.

  • Le résultat contient une duplication de la clef am dans la hauteur correspondant aux 2 valeurs min et max
  • il manque éventuellement une colonne indiquant qui est le min et qui est le max en face de chaque valeur de am
mt[ j=myrange2(.SD),by="am"]
##    am   V1
## 1:  1 15.0
## 2:  1 33.9
## 3:  0 10.4
## 4:  0 24.4

Fonction renvoyant une liste de vecteurs de longueurs 1

myrange3 = function(sd){
    # la fonction renvoie une liste de vecteurs de longueur  1
    a = sd[ j=range(mpg)]
    b = as.list(a)
    names(b)=c("min","max")
    b$range = a[2]-a[1]
    b
}

exemple 4

La fonction myrange3 renvoie une liste de vecteurs de longueur 1

  • apparition de colonnes supplémentaires sans duplication de la clef
  • les noms des colonnes sont les noms de la liste renvoyée par myrange3
mt[ j=myrange3(.SD),by="am"]
##    am  min  max range
## 1:  1 15.0 33.9  18.9
## 2:  0 10.4 24.4  14.0

Fonction renvoyant une liste de vecteurs de longueurs inégales > 1

myrange4 = function(sd){
    # la fonction renvoie une liste de vecteurs de longueur > 1, et inégales
    a = sd[ j=range(mpg)]
    b = list(ext=a,side=c("min","max"))
    b$range = a[2]-a[1]
    b
}

exemple 5

La fonction myrange4 renvoie une liste de vecteurs de longueurs inégales > 1

  • colonnes supplémentaires nommées à partir de la liste renvoyée
  • duplication de la clef là où c'est nécessaire
mt[ j=myrange4(.SD),by="am"]
##    am  ext side range
## 1:  1 15.0  min  18.9
## 2:  1 33.9  max  18.9
## 3:  0 10.4  min  14.0
## 4:  0 24.4  max  14.0
Logiciel R perfectionnement
Gagner en autonomie et en productivité
— comprendre, modifier et écrire le code pour les besoins les plus courants (manipulations de données, statistiques descriptives) mais aussi pour des requêtes avancées : calculs complexes, formules conditionnelles ; — réaliser facilement de nombreux calculs par groupe ; — automatiser une chaîne de traitement.
Obtenir un devis
Retour