Nous allons utiliser la base de données Comptoir2000, stockée sous forme de fichiers textes, dont voici les liens :

Quelques rappels et informations

Il est possible de faire l’équivalent d’un COUNT(*) avec la commande aggregate() en utilisant la fonction length. Voici un exemple, dans mtcars, pour calculer le nombre de voitures pour chaque modalité de am. Dans ce cas, la variable à gauche du tilde (~) n’a pas d’importance mais il est nécessaire de la mettre.

tab = aggregate(mpg ~ am, mtcars, length)
tab
  am mpg
1  0  19
2  1  13

Voici le même résultat en SQL.

sqldf("
SELECT am, COUNT(*)
    FROM mtcars
    GROUP BY am
      ")
  am COUNT(*)
1  0       19
2  1       13

Pour réaliser l’équivalent d’un COUNT(DISTINCT var), il est nécessaire d’utiliser une fonction personnalisée. Voici la définition de cette fonction et un exemple d’utilisation.

length_distinct <- function(x) {
    return (length(unique(x)))
}
tab = aggregate(carb ~ am, mtcars, length_distinct)
tab
  am carb
1  0    4
2  1    5

Et en SQL

sqldf("
SELECT am, COUNT(DISTINCT carb)
    FROM mtcars
    GROUP BY am
")
  am COUNT(DISTINCT carb)
1  0                    4
2  1                    5

Pour information, si on veut avoir une table triée, il faut utiliser la fonction order() dont voici un exemple de fonctionnement.

# Création d'un vecteur
a = c(5, 1, 4, 3)
# Affichage de celui-ci
a
[1] 5 1 4 3
# Tri de ce vecteur (ordre par défaut = croissant)
sort(a)
[1] 1 3 4 5
# Tri de ce vecteur par ordre décroissant
sort(a, decreasing = TRUE)
[1] 5 4 3 1
# Indices des valeurs triées dans l'ordre croissant par défaut
order(a)
[1] 2 4 3 1
# Indices des valeurs triées dans l'ordre décroissant
order(a, decreasing = TRUE)
[1] 1 3 4 2

Nous calculons ici, dans mtcars, la consommation moyenne pour chaque modalité de gear.

tab = aggregate(mpg ~ gear, mtcars, mean)
tab
  gear      mpg
1    3 16.10667
2    4 24.53333
3    5 21.38000

Nous pouvons obenir cette table triée sur la consommation (variable mpg). L’ordre par défaut est bien évidemment l’ordre croissant.

tab_tri = tab[order(tab$mpg),]
tab_tri
  gear      mpg
1    3 16.10667
3    5 21.38000
2    4 24.53333

Il est possible d’avoir l’ordre décroissant avec l’option decreasing = TRUE. Et on peut limiter les décimales dans la fonction kable() avec l’option digits = 2.

tab_tri2 = tab[order(tab$mpg, decreasing = TRUE),]
tab_tri2
  gear      mpg
2    4 24.53333
3    5 21.38000
1    3 16.10667

Exercice

Créer un document html en R markdown, contenant les éléments suivants. Vous devez faire un chapitre (avec titre de niveau 2 donc), pour chaque item de la liste suivante. N’hésitez pas à faire des sous-partie pour chaque sous-item. Vous devez utiliser le langage R, et pas de SQL.

  1. Importer les données dans R, à l’aide de read.table()
  2. Employés
    1. Lister les employés (nom et prénom) situés au "Royaume-Uni"
    2. Lister les différentes fonctions occupées par les employés
    3. Indiquer le nombre d’employés par pays
  3. Produits
    1. Lister le nombre de produits par pays des fournisseurs
    2. Lister le nombre de produits par catégorie
    3. Ajouter le prix moyen, le prix minimum (min) et le prix maximum (max)
  4. Créer une table MontantCommande qui contient, pour chaque commande, les informations suivantes
    • Numéro de commande
    • Montant total de la commande
    • Frais de port
    • Montant total des produits
    • Nombre de produits différents dans la commande
  5. Calculer le montant total des commandes de chaque client
  6. Calculer le montant total des commandes pour chaque pays des clients