Recherche…


Remarques

dplyr est une itération de plyr qui fournit des fonctions flexibles basées sur "ver" pour manipuler des données dans R. La dernière version de dplyr peut être téléchargée depuis CRAN en utilisant

install.package("dplyr")

L'objet clé de dplyr est un tbl, une représentation d'une structure de données tabulaire. Actuellement, dplyr (version 0.5.0) supporte:

  • trames de données
  • tableaux de données
  • SQLite
  • PostgreSQL / Redshift
  • MySQL / MariaDB
  • Bigquery
  • MonetDB
  • cubes de données avec tableaux (implémentation partielle)

Les verbes à table unique de dplyr

dplyr introduit une grammaire de manipulation de données dans R Il fournit une interface cohérente pour travailler avec les données, peu importe où elles sont stockées: data.frame , data.table ou une database . Les éléments clés de dplyr sont écrits en utilisant Rcpp , ce qui le rend très rapide pour travailler avec des données en mémoire.

La philosophie de dplyr est d'avoir de petites fonctions qui font une chose bien. Les cinq fonctions simples ( filter , arrange , select , mutate et summarise ) peuvent être utilisées pour révéler de nouvelles façons de décrire les données. Combinées avec group_by , ces fonctions peuvent être utilisées pour calculer des statistiques récapitulatives par groupe.

Points communs de la syntaxe

Toutes ces fonctions ont une syntaxe similaire:

  • Le premier argument de toutes ces fonctions est toujours un bloc de données
  • Les colonnes peuvent être référées directement en utilisant des noms de variables nus (c.-à-d. Sans utiliser $ )
  • Ces fonctions ne modifient pas les données d'origine elles-mêmes, c'est-à-dire qu'elles n'ont pas d'effets secondaires. Par conséquent, les résultats doivent toujours être enregistrés dans un objet.

Nous utiliserons le jeu de données intégré mtcars pour explorer les dplyr une seule table de dplyr . Avant de convertir le type de mtcars à tbl_df (car il rend plus propre d'impression), nous ajoutons les rownames de l'ensemble de données en tant que colonne à l' aide rownames_to_column fonction du Tibble package.

library(dplyr) # This documentation was written using version 0.5.0

mtcars_tbl <- as_data_frame(tibble::rownames_to_column(mtcars, "cars"))

# examine the structure of data
head(mtcars_tbl)

# A tibble: 6 x 12
#               cars   mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#              <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1         Mazda RX4  21.0     6   160   110  3.90 2.620 16.46     0     1     4     4
#2     Mazda RX4 Wag  21.0     6   160   110  3.90 2.875 17.02     0     1     4     4
#3        Datsun 710  22.8     4   108    93  3.85 2.320 18.61     1     1     4     1
#4    Hornet 4 Drive  21.4     6   258   110  3.08 3.215 19.44     1     0     3     1
#5 Hornet Sportabout  18.7     8   360   175  3.15 3.440 17.02     0     0     3     2
#6           Valiant  18.1     6   225   105  2.76 3.460 20.22     1     0     3     1

filtre

filter aide les lignes de sous-ensemble correspondant à certains critères. Le premier argument est le nom du data.frame et le second (et les suivants) sont les critères qui filtrent les données (ces critères doivent être soit TRUE ou FALSE ).

Sous-ensemble toutes les voitures qui ont 4 cylindres - cyl :

filter(mtcars_tbl, cyl == 4) 

# A tibble: 11 x 12
#             cars   mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#            <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1      Datsun 710  22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1
#2       Merc 240D  24.4     4 146.7    62  3.69 3.190 20.00     1     0     4     2
#3        Merc 230  22.8     4 140.8    95  3.92 3.150 22.90     1     0     4     2
#4        Fiat 128  32.4     4  78.7    66  4.08 2.200 19.47     1     1     4     1
#5     Honda Civic  30.4     4  75.7    52  4.93 1.615 18.52     1     1     4     2
# ... with 6 more rows

Nous pouvons passer plusieurs critères séparés par une virgule. Pour sous-équiper les voitures qui ont soit 4 ou 6 cylindres - cyl et ont 5 vitesses - gear :

filter(mtcars_tbl, cyl == 4 | cyl == 6, gear == 5)

# A tibble: 3 x 12
#           cars   mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#          <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 Porsche 914-2  26.0     4 120.3    91  4.43 2.140  16.7     0     1     5     2
#2  Lotus Europa  30.4     4  95.1   113  3.77 1.513  16.9     1     1     5     2
#3  Ferrari Dino  19.7     6 145.0   175  3.62 2.770  15.5     0     1     5     6

filter sélectionne les lignes en fonction des critères, pour sélectionner les lignes par position, utilisez la slice . slice ne prend que 2 arguments: le premier est un data.frame et le second des valeurs de ligne entières.

Pour sélectionner les lignes 6 à 9:

slice(mtcars_tbl, 6:9)

# A tibble: 4 x 12
#        cars   mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#       <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1    Valiant  18.1     6 225.0   105  2.76  3.46 20.22     1     0     3     1
#2 Duster 360  14.3     8 360.0   245  3.21  3.57 15.84     0     0     3     4
#3  Merc 240D  24.4     4 146.7    62  3.69  3.19 20.00     1     0     4     2
#4   Merc 230  22.8     4 140.8    95  3.92  3.15 22.90     1     0     4     2

Ou:

slice(mtcars_tbl, -c(1:5, 10:n())) 

Cela donne le même résultat que slice(mtcars_tbl, 6:9)

n() représente le nombre d'observations dans le groupe en cours

organiser

arrange est utilisé pour trier les données selon une ou plusieurs variables spécifiées. Tout comme le verbe précédent (et toutes les autres fonctions de dplyr ), le premier argument est un data.frame , et des arguments conséquents sont utilisés pour trier les données. Si plusieurs variables sont transmises, les données sont d'abord triées par la première variable, puis par la seconde, etc.

Pour commander les données par horsepower - hp

arrange(mtcars_tbl, hp) 

# A tibble: 32 x 12
#             cars   mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#            <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1     Honda Civic  30.4     4  75.7    52  4.93 1.615 18.52     1     1     4     2
#2       Merc 240D  24.4     4 146.7    62  3.69 3.190 20.00     1     0     4     2
#3  Toyota Corolla  33.9     4  71.1    65  4.22 1.835 19.90     1     1     4     1
#4        Fiat 128  32.4     4  78.7    66  4.08 2.200 19.47     1     1     4     1
#5       Fiat X1-9  27.3     4  79.0    66  4.08 1.935 18.90     1     1     4     1
#6   Porsche 914-2  26.0     4 120.3    91  4.43 2.140 16.70     0     1     5     2
# ... with 26 more rows

Pour arrange les données en miles par gallon - mpg en ordre décroissant, suivi du nombre de cylindres - cyl :

arrange(mtcars_tbl, desc(mpg), cyl)

# A tibble: 32 x 12
#             cars   mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#            <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1  Toyota Corolla  33.9     4  71.1    65  4.22 1.835 19.90     1     1     4     1
#2        Fiat 128  32.4     4  78.7    66  4.08 2.200 19.47     1     1     4     1
#3     Honda Civic  30.4     4  75.7    52  4.93 1.615 18.52     1     1     4     2
#4    Lotus Europa  30.4     4  95.1   113  3.77 1.513 16.90     1     1     5     2
#5       Fiat X1-9  27.3     4  79.0    66  4.08 1.935 18.90     1     1     4     1
#6   Porsche 914-2  26.0     4 120.3    91  4.43 2.140 16.70     0     1     5     2
# ... with 26 more rows

sélectionner

select est utilisé pour sélectionner uniquement un sous-ensemble de variables. Pour sélectionner uniquement mpg , disp , wt , qsec et vs de mtcars_tbl :

select(mtcars_tbl, mpg, disp, wt, qsec, vs)

# A tibble: 32 x 5
#     mpg  disp    wt  qsec    vs
#   <dbl> <dbl> <dbl> <dbl> <dbl>
#1   21.0 160.0 2.620 16.46     0
#2   21.0 160.0 2.875 17.02     0
#3   22.8 108.0 2.320 18.61     1
#4   21.4 258.0 3.215 19.44     1
#5   18.7 360.0 3.440 17.02     0
#6   18.1 225.0 3.460 20.22     1
# ... with 26 more rows

: notation peut être utilisée pour sélectionner des colonnes consécutives. Pour sélectionner les colonnes des cars via disp et vs via carb :

select(mtcars_tbl, cars:disp, vs:carb)

# A tibble: 32 x 8
#                cars   mpg   cyl  disp    vs    am  gear  carb
#               <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1          Mazda RX4  21.0     6 160.0     0     1     4     4
#2      Mazda RX4 Wag  21.0     6 160.0     0     1     4     4
#3         Datsun 710  22.8     4 108.0     1     1     4     1
#4     Hornet 4 Drive  21.4     6 258.0     1     0     3     1
#5  Hornet Sportabout  18.7     8 360.0     0     0     3     2
#6            Valiant  18.1     6 225.0     1     0     3     1
# ... with 26 more rows

ou select(mtcars_tbl, -(hp:qsec))

Pour les jeux de données contenant plusieurs colonnes, il peut être fastidieux de sélectionner plusieurs colonnes par nom. Pour vous faciliter la vie, il existe un certain nombre de fonctions d'assistance (telles que starts_with() , ends_with() , contains() , matches() , num_range() , one_of() et everything() ) qui peuvent être utilisés dans select . Pour en savoir plus sur leur utilisation, voir ?select_helpers et ?select .

Remarque : En référence aux colonnes directement dans select() , nous utilisons des noms de colonnes nus, mais les guillemets doivent être utilisés en référence aux colonnes des fonctions d'assistance.

Pour renommer les colonnes en sélectionnant:

select(mtcars_tbl, cylinders = cyl, displacement = disp) 

# A tibble: 32 x 2
#   cylinders displacement
#       <dbl>        <dbl>
#1          6        160.0
#2          6        160.0
#3          4        108.0
#4          6        258.0
#5          8        360.0
#6          6        225.0
# ... with 26 more rows

Comme prévu, toutes les autres variables sont supprimées.

Pour renommer des colonnes sans supprimer d'autres variables, utilisez rename :

rename(mtcars_tbl, cylinders = cyl, displacement = disp)

# A tibble: 32 x 12
#                cars   mpg cylinders displacement    hp  drat    wt  qsec    vs
#               <chr> <dbl>     <dbl>        <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1          Mazda RX4  21.0         6        160.0   110  3.90 2.620 16.46     0
#2      Mazda RX4 Wag  21.0         6        160.0   110  3.90 2.875 17.02     0
#3         Datsun 710  22.8         4        108.0    93  3.85 2.320 18.61     1
#4     Hornet 4 Drive  21.4         6        258.0   110  3.08 3.215 19.44     1
#5  Hornet Sportabout  18.7         8        360.0   175  3.15 3.440 17.02     0
#6            Valiant  18.1         6        225.0   105  2.76 3.460 20.22     1
# ... with 26 more rows, and 3 more variables: am <dbl>, gear <dbl>, carb <dbl>

subir une mutation

mutate peut être utilisé pour ajouter de nouvelles colonnes aux données. Comme toutes les autres fonctions de dplyr , dplyr n'ajoute pas les colonnes nouvellement créées aux données d'origine. Les colonnes sont ajoutées à la fin du data.frame .

mutate(mtcars_tbl, weight_ton = wt/2, weight_pounds = weight_ton * 2000)

# A tibble: 32 x 14
#                cars   mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb weight_ton weight_pounds
#               <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>      <dbl>         <dbl>
#1          Mazda RX4  21.0     6 160.0   110  3.90 2.620 16.46     0     1     4     4     1.3100          2620
#2      Mazda RX4 Wag  21.0     6 160.0   110  3.90 2.875 17.02     0     1     4     4     1.4375          2875
#3         Datsun 710  22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1     1.1600          2320
#4     Hornet 4 Drive  21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1     1.6075          3215
#5  Hornet Sportabout  18.7     8 360.0   175  3.15 3.440 17.02     0     0     3     2     1.7200          3440
#6            Valiant  18.1     6 225.0   105  2.76 3.460 20.22     1     0     3     1     1.7300          3460
# ... with 26 more rows

Notez l'utilisation de weight_ton lors de la création de weight_pounds . Contrairement à la base R , mutate nous permet de faire référence à des colonnes que nous venons de créer pour une opération ultérieure.

Pour ne conserver que les colonnes nouvellement créées, utilisez transmute au lieu de mutate :

transmute(mtcars_tbl, weight_ton = wt/2, weight_pounds = weight_ton * 2000)

# A tibble: 32 x 2
#   weight_ton weight_pounds
#        <dbl>         <dbl>
#1      1.3100          2620
#2      1.4375          2875
#3      1.1600          2320
#4      1.6075          3215
#5      1.7200          3440
#6      1.7300          3460
# ... with 26 more rows

résumer

summarise les statistiques récapitulatives des variables en réduisant plusieurs valeurs à une seule valeur. Il peut calculer plusieurs statistiques et nous pouvons nommer ces colonnes récapitulatives dans la même déclaration.

Pour calculer la moyenne et l' écart type de mpg et de disp de toutes les voitures du jeu de données:

summarise(mtcars_tbl, mean_mpg = mean(mpg), sd_mpg = sd(mpg), 
          mean_disp = mean(disp), sd_disp = sd(disp))

# A tibble: 1 x 4
#  mean_mpg   sd_mpg mean_disp  sd_disp
#     <dbl>    <dbl>     <dbl>    <dbl>
#1 20.09062 6.026948  230.7219 123.9387

par groupe

group_by peut être utilisé pour effectuer des opérations de groupe sur des données. Lorsque les verbes définis ci-dessus sont appliqués à ces données groupées, ils sont automatiquement appliqués à chaque groupe séparément.

Pour trouver mean et sd de mpg par cyl :

by_cyl <- group_by(mtcars_tbl, cyl)
summarise(by_cyl, mean_mpg = mean(mpg), sd_mpg = sd(mpg))


# A tibble: 3 x 3
#    cyl mean_mpg   sd_mpg
#  <dbl>    <dbl>    <dbl>
#1     4 26.66364 4.509828
#2     6 19.74286 1.453567
#3     8 15.10000 2.560048

Tout mettre en place

Nous sélectionnons les colonnes des cars par hp et par gear , commandons les rangées par cyl et du plus élevé au plus bas mpg , mpg les données par gear et finalement ne sous-ensemble que les voitures ayant mpg > 20 et hp > 75

selected <- select(mtcars_tbl, cars:hp, gear)
ordered <- arrange(selected, cyl, desc(mpg))
by_cyl <- group_by(ordered, gear)
filter(by_cyl, mpg > 20, hp > 75)

Source: local data frame [9 x 6]
Groups: gear [3]

#            cars   mpg   cyl  disp    hp  gear
#           <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
#1   Lotus Europa  30.4     4  95.1   113     5
#2  Porsche 914-2  26.0     4 120.3    91     5
#3     Datsun 710  22.8     4 108.0    93     4
#4       Merc 230  22.8     4 140.8    95     4
#5  Toyota Corona  21.5     4 120.1    97     3
# ... with 4 more rows

Peut-être que nous ne sommes pas intéressés par les résultats intermédiaires, nous pouvons obtenir le même résultat que ci-dessus en encapsulant les appels de fonction:

filter(
    group_by(
        arrange(
            select(
                mtcars_tbl, cars:hp
            ), cyl, desc(mpg)
        ), cyl   
    ),mpg > 20, hp > 75 
)

Cela peut être un peu difficile à lire. Ainsi, les opérations de dplyr peuvent être chaînées à l'aide de l'opérateur pipe %>% . Le code ci-dessus est transféré à:

mtcars_tbl %>% 
    select(cars:hp) %>% 
    arrange(cyl, desc(mpg)) %>%
    group_by(cyl) %>% 
    filter(mpg > 20, hp > 75) 

résumer plusieurs colonnes

dplyr fournit dplyr summarise_all() pour appliquer des fonctions à toutes les colonnes (non regroupées).

Pour trouver le nombre de valeurs distinctes pour chaque colonne:

mtcars_tbl %>% 
    summarise_all(n_distinct)

# A tibble: 1 x 12
#   cars   mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#  <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
#1    32    25     3    27    22    22    29    30     2     2     3     6

Pour trouver le nombre de valeurs distinctes pour chaque colonne par cyl :

mtcars_tbl %>% 
    group_by(cyl) %>% 
    summarise_all(n_distinct)

# A tibble: 3 x 12
#    cyl  cars   mpg  disp    hp  drat    wt  qsec    vs    am  gear  carb
#  <dbl> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
#1     4    11     9    11    10    10    11    11     2     2     3     2
#2     6     7     6     5     4     5     6     7     2     2     3     3
#3     8    14    12    11     9    11    13    14     1     2     2     4

Notez que nous avons juste dû ajouter l'instruction group_by et le reste du code est le même. La sortie comprend maintenant trois lignes - une pour chaque valeur unique de cyl .

Pour summarise plusieurs colonnes spécifiques, utilisez summarise_at

mtcars_tbl %>% 
    group_by(cyl) %>% 
    summarise_at(c("mpg", "disp", "hp"), mean)

# A tibble: 3 x 4
#    cyl      mpg     disp        hp
#  <dbl>    <dbl>    <dbl>     <dbl>
#1     4 26.66364 105.1364  82.63636
#2     6 19.74286 183.3143 122.28571
#3     8 15.10000 353.1000 209.21429

fonctions d' helper ( ?select_helpers ) peuvent être utilisées à la place des noms de colonnes pour sélectionner des colonnes spécifiques

Pour appliquer plusieurs fonctions, transmettez les noms de fonctions sous la forme d'un vecteur de caractères:

mtcars_tbl %>% 
    group_by(cyl) %>% 
    summarise_at(c("mpg", "disp", "hp"), 
                 c("mean", "sd"))

ou enveloppez-les dans des funs :

mtcars_tbl %>% 
    group_by(cyl) %>% 
    summarise_at(c("mpg", "disp", "hp"), 
                 funs(mean, sd))

# A tibble: 3 x 7
#    cyl mpg_mean disp_mean   hp_mean   mpg_sd  disp_sd    hp_sd
#  <dbl>    <dbl>     <dbl>     <dbl>    <dbl>    <dbl>    <dbl>
#1     4 26.66364  105.1364  82.63636 4.509828 26.87159 20.93453
#2     6 19.74286  183.3143 122.28571 1.453567 41.56246 24.26049
#3     8 15.10000  353.1000 209.21429 2.560048 67.77132 50.97689

Les noms de colonne sont maintenant ajoutés aux noms de fonction pour les garder distincts. Pour changer cela, passez le nom à ajouter avec la fonction:

mtcars_tbl %>% 
    group_by(cyl) %>% 
    summarise_at(c("mpg", "disp", "hp"), 
                 c(Mean = "mean", SD = "sd"))

mtcars_tbl %>% 
    group_by(cyl) %>% 
    summarise_at(c("mpg", "disp", "hp"), 
                 funs(Mean = mean, SD = sd))


# A tibble: 3 x 7
#    cyl mpg_Mean disp_Mean   hp_Mean   mpg_SD  disp_SD    hp_SD
#  <dbl>    <dbl>     <dbl>     <dbl>    <dbl>    <dbl>    <dbl>
#1     4 26.66364  105.1364  82.63636 4.509828 26.87159 20.93453
#2     6 19.74286  183.3143 122.28571 1.453567 41.56246 24.26049
#3     8 15.10000  353.1000 209.21429 2.560048 67.77132 50.97689

Pour sélectionner des colonnes de manière conditionnelle, utilisez summarise_if :

Prenez la mean de toutes les colonnes numeric regroupées par cyl :

mtcars_tbl %>% 
    group_by(cyl) %>% 
    summarise_if(is.numeric, mean) 

# A tibble: 3 x 11
#    cyl      mpg     disp        hp     drat       wt     qsec
#  <dbl>    <dbl>    <dbl>     <dbl>    <dbl>    <dbl>    <dbl>
#1     4 26.66364 105.1364  82.63636 4.070909 2.285727 19.13727
#2     6 19.74286 183.3143 122.28571 3.585714 3.117143 17.97714
#3     8 15.10000 353.1000 209.21429 3.229286 3.999214 16.77214
# ... with 4 more variables: vs <dbl>, am <dbl>, gear <dbl>,
#   carb <dbl>

Cependant, certaines variables sont discrètes et la mean de ces variables n'a pas de sens.

Pour ne prendre la mean que de variables continues par cyl :

mtcars_tbl %>% 
    group_by(cyl) %>% 
    summarise_if(function(x) is.numeric(x) & n_distinct(x) > 6, mean)

# A tibble: 3 x 7
#    cyl      mpg     disp        hp     drat       wt     qsec
#  <dbl>    <dbl>    <dbl>     <dbl>    <dbl>    <dbl>    <dbl>
#1     4 26.66364 105.1364  82.63636 4.070909 2.285727 19.13727
#2     6 19.74286 183.3143 122.28571 3.585714 3.117143 17.97714
#3     8 15.10000 353.1000 209.21429 3.229286 3.999214 16.77214

Observation de sous-ensemble (lignes)

dplyr::filter() - Sélectionnez un sous-ensemble de lignes dans un dplyr::filter() données répondant à un critère logique:

dplyr::filter(iris,Sepal.Length>7)
#       Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
#    1           7.1         3.0          5.9         2.1 virginica
#    2           7.6         3.0          6.6         2.1 virginica
#    3           7.3         2.9          6.3         1.8 virginica
#    4           7.2         3.6          6.1         2.5 virginica
#    5           7.7         3.8          6.7         2.2 virginica
#    6           7.7         2.6          6.9         2.3 virginica
#    7           7.7         2.8          6.7         2.0 virginica
#    8           7.2         3.2          6.0         1.8 virginica
#    9           7.2         3.0          5.8         1.6 virginica
#    10          7.4         2.8          6.1         1.9 virginica
#    11          7.9         3.8          6.4         2.0 virginica
#    12          7.7         3.0          6.1         2.3 virginica

dplyr::distinct() - Supprime les lignes en double:

distinct(iris, Sepal.Length, .keep_all = TRUE)
#       Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
#    1           5.1         3.5          1.4         0.2     setosa
#    2           4.9         3.0          1.4         0.2     setosa
#    3           4.7         3.2          1.3         0.2     setosa
#    4           4.6         3.1          1.5         0.2     setosa
#    5           5.0         3.6          1.4         0.2     setosa
#    6           5.4         3.9          1.7         0.4     setosa
#    7           4.4         2.9          1.4         0.2     setosa
#    8           4.8         3.4          1.6         0.2     setosa
#    9           4.3         3.0          1.1         0.1     setosa
#   10          5.8         4.0          1.2         0.2     setosa
#   11          5.7         4.4          1.5         0.4     setosa
#   12          5.2         3.5          1.5         0.2     setosa
#   13          5.5         4.2          1.4         0.2     setosa
#   14          4.5         2.3          1.3         0.3     setosa
#   15          5.3         3.7          1.5         0.2     setosa
#   16          7.0         3.2          4.7         1.4 versicolor
#   17          6.4         3.2          4.5         1.5 versicolor
#   18          6.9         3.1          4.9         1.5 versicolor
#   19          6.5         2.8          4.6         1.5 versicolor
#   20          6.3         3.3          4.7         1.6 versicolor
#   21          6.6         2.9          4.6         1.3 versicolor
#   22          5.9         3.0          4.2         1.5 versicolor
#   23          6.0         2.2          4.0         1.0 versicolor
#   24          6.1         2.9          4.7         1.4 versicolor
#   25          5.6         2.9          3.6         1.3 versicolor
#   26          6.7         3.1          4.4         1.4 versicolor
#   27          6.2         2.2          4.5         1.5 versicolor
#   28          6.8         2.8          4.8         1.4 versicolor
#   29          7.1         3.0          5.9         2.1  virginica
#   30          7.6         3.0          6.6         2.1  virginica
#   31          7.3         2.9          6.3         1.8  virginica
#   32          7.2         3.6          6.1         2.5  virginica
#   33          7.7         3.8          6.7         2.2  virginica
#   34          7.4         2.8          6.1         1.9  virginica
#   35          7.9         3.8          6.4         2.0  virginica

Agrégation avec l'opérateur%>% (pipe)

L' opérateur pipe (%>%) pourrait être utilisé en combinaison avec les fonctions dplyr . Dans cet exemple, nous utilisons le mtcars données mtcars (voir help("mtcars") pour plus d'informations) pour montrer comment sumariser un bloc de données et pour ajouter des variables aux données avec le résultat de l'application d'une fonction.

library(dplyr)
library(magrittr)
df <- mtcars
df$cars <- rownames(df) #just add the cars names to the df
df <- df[,c(ncol(df),1:(ncol(df)-1))] # and place the names in the first column

1. Sumariser les données

Pour calculer des statistiques, nous utilisons un summarize et les fonctions appropriées. Dans ce cas, n() est utilisé pour compter le nombre de cas.

 df %>%
  summarize(count=n(),mean_mpg = mean(mpg, na.rm = TRUE),
            min_weight = min(wt),max_weight = max(wt))

#  count mean_mpg min_weight max_weight
#1    32 20.09062      1.513      5.424

2. Calculez les statistiques par groupe

Il est possible de calculer les statistiques par groupes de données. Dans ce cas par Nombre de cylindres et Nombre de vitesses avant

df %>%
  group_by(cyl, gear) %>%
  summarize(count=n(),mean_mpg = mean(mpg, na.rm = TRUE),
            min_weight = min(wt),max_weight = max(wt))

# Source: local data frame [8 x 6]
# Groups: cyl [?]
#
#    cyl  gear count mean_mpg min_weight max_weight
#  <dbl> <dbl> <int>    <dbl>      <dbl>      <dbl>
#1     4     3     1   21.500      2.465      2.465
#2     4     4     8   26.925      1.615      3.190
#3     4     5     2   28.200      1.513      2.140
#4     6     3     2   19.750      3.215      3.460
#5     6     4     4   19.750      2.620      3.440
#6     6     5     1   19.700      2.770      2.770
#7     8     3    12   15.050      3.435      5.424
#8     8     5     2   15.400      3.170      3.570

Exemples de variables NSE et de chaînes dans dpylr

dplyr utilise l'évaluation non standard (NSE), c'est pourquoi nous pouvons normalement utiliser les noms de variables sans guillemets. Cependant, parfois, pendant le pipeline de données, nous devons extraire nos noms de variables d'autres sources, comme une boîte de sélection Shiny. Dans le cas de fonctions comme select , nous pouvons simplement utiliser select_ pour utiliser une variable de chaîne pour sélectionner

variable1 <- "Sepal.Length"
variable2 <- "Sepal.Width"
iris %>%
select_(variable1, variable2) %>%
head(n=5)
#  Sepal.Length Sepal.Width
#  1          5.1         3.5
#  2          4.9         3.0
#  3          4.7         3.2
#  4          4.6         3.1
#  5          5.0         3.6

Mais si l' on veut utiliser d' autres fonctionnalités telles que Résumer ou un filtre , nous devons utiliser interp fonction de lazyeval package

variable1 <- "Sepal.Length"
variable2 <- "Sepal.Width"
variable3 <- "Species"
iris %>%
select_(variable1, variable2, variable3) %>%
group_by_(variable3) %>%
summarize_(mean1 = lazyeval::interp(~mean(var), var = as.name(variable1)), mean2 = lazyeval::interp(~mean(var), var = as.name(variable2)))
#      Species mean1 mean2
#       <fctr> <dbl> <dbl>
# 1     setosa 5.006 3.428
# 2 versicolor 5.936 2.770
# 3  virginica 6.588 2.974


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