Mis a jour le 2016-05-22, 16:22

Dataframes avancés

Sélection de lignes ou colonnes d'un dataframe :
Sélection de lignes avec des expressions booléennes :
Elimination des doublons dans un dataframe : grâce à unique :
fr <- data.frame(A = factor(c("a", "b", "a")), B = c(3, 4, 3))
unique(fr)
  A B
1 a 3
2 b 4
Calcul d'agrégats par groupe avec by (souvent plus facile d'utiliser aggregate ci-dessous) :
Calcul d'agrégats par groupe avec aggregate (beaucoup plus commode) :
Passage d'un dataframe avec 2 facteurs à une matrice, avec aggrégation des valeurs au passage (souvent avec moyenne) :
fr <- data.frame(typ = factor(c("a", "b", "b", "a", "b")),
                 typ2 = factor(c("A", "B", "B", "B", "B")),
                 val = c(3, 5, 2, 3, 1))
tapply(fr$val, list(typ = fr$typ, typ2 = fr$typ2), mean)
donne
   typ2
typ  A        B
  a  3 3.000000
  b NA 2.666667
le résultat est une matrice.
Jointure de frames (au sens relationnel) :
Si fr1 <-data.frame(val1 = c("a", "b"), val2 = c(2, 4)); fr2 <- data.frame(val2 = c(2, 3, 4), val3 = c("b", "c", "a")) :
Calcul d'aggrégats multiples (par exemple, on veut calculer sur chaque groupe à la fois la moyenne et l'écart-type des valeurs d'une colonne) : utiliser pour cela le package doBy (non installé par défaut) :
Tri d'un frame selon une valeur :
library(doBy)
fr <- data.frame(lab = c("A", "B", "A", "B", "B", "A", "B", "B", "B", "B"),
                 val = c(1, 5, 2, 6, 7, 3, 6, 8, 5, 7))
orderBy(~ lab, fr)
donne :
   lab val
1    A   1
3    A   2
6    A   3
2    B   5
4    B   6
5    B   7
7    B   6
8    B   8
9    B   5
10   B   7
Stacking/unstacking de frames :
Transformation d'une matrice en data-frame à colonnes avec les noms des lignes et des colonnes de la matrice et les valeurs :
mat <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 3,
              dimnames = list(c("A", "B", "C"), c("a", "b")))
print(mat)
fr <- data.frame(varLine = rep(rownames(mat), times = ncol(mat)),
                 varColumn = rep(colnames(mat), each = nrow(mat)),
                 values = as.vector(mat))
print(fr)
donne :
  a b
A 1 4
B 2 5
C 3 6
  varLine varColumn values
1       A         a      1
2       B         a      2
3       C         a      3
4       A         b      4
5       B         b      5
6       C         b      6
Split de valeurs selon un facteur :
Si fr est le dataframe :
  typ val
1   a   3
2   b   5
3   b   2
4   a   3
5   b   1
split(fr$val, fr$typ) : partage les valeurs de fr$val selon les valeurs de fr$typ pour donner une liste dont les éléments sont les vecteurs de valeurs de fr$val par valeur de fr$typ :
$a
[1] 3 3

$b
[1] 5 2 1
Vérification du l'équilibre d'un design, avec la fonction replications :

Copyright Aymeric Duclert
programmer en R, tutoriel R, graphes en R