Suche…


Bemerkungen

dplyr ist eine Iteration von plyr, die flexible "Verb" -basierte Funktionen zur Bearbeitung von Daten in R bereitstellt. Die neueste Version von dplyr kann von CRAN heruntergeladen werden

install.package("dplyr")

Das Schlüsselobjekt in dplyr ist eine Tabelle, eine Darstellung einer tabellarischen Datenstruktur. Derzeit unterstützt dplyr (Version 0.5.0):

  • Datenrahmen
  • Datentabellen
  • SQLite
  • PostgreSQL / Redshift
  • MySQL / MariaDB
  • Große frage
  • MonetDB
  • Datenwürfel mit Arrays (teilweise Implementierung)

dplyr's einzelne Tabellenverben

dplyr führt eine Grammatik der Datenmanipulation in R . Es bietet eine konsistente Schnittstelle, um mit Daten zu arbeiten, egal wo sie gespeichert sind: data.frame , data.table oder einer database . Die wichtigsten Teile von dplyr werden mit Rcpp geschrieben , wodurch das Arbeiten mit In-Memory-Daten sehr schnell ist.

dplyr Philosophie ist es, kleine Funktionen zu haben, die eine Sache gut machen. Die fünf einfachen Funktionen ( filter , arrange , select , mutate und summarise ) können verwendet werden, um neue Möglichkeiten zur Beschreibung von Daten aufzuzeigen. In Kombination mit group_by können diese Funktionen zum Berechnen von gruppenweisen Zusammenfassungsstatistiken verwendet werden.

Syntax-Gemeinsamkeiten

Alle diese Funktionen haben eine ähnliche Syntax:

  • Das erste Argument für alle diese Funktionen ist immer ein Datenrahmen
  • Spalten können direkt mit bloßen Variablennamen referenziert werden (dh ohne $ ).
  • Diese Funktionen ändern die Originaldaten nicht selbst, dh sie haben keine Nebenwirkungen. Daher sollten die Ergebnisse immer in einem Objekt gespeichert werden.

Wir werden das integrierte mtcars- Dataset verwenden, um die einzelnen Tabellenverben von dplyr zu dplyr . Bevor Sie den Typ der mtcars in tbl_df (da der Druck dadurch sauberer wird), fügen Sie die rownames des Datasets als Spalte hinzu, indem rownames_to_column Funktion rownames_to_column aus dem tibble- Paket verwenden.

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

Filter

filter hilft bei der Untermenge von Zeilen, die bestimmten Kriterien entsprechen. Das erste Argument ist der Name von data.frame und das zweite (und nachfolgende) Argument sind die Kriterien, nach denen die Daten gefiltert werden (diese Kriterien sollten entweder TRUE oder FALSE ).

Teilmenge alle Autos, die 4 Zylinder haben - 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

Wir können mehrere durch Kommas getrennte Kriterien übergeben. Die Wagen mit 4 oder 6 Zylindern - cyl und 5 Gängen - müssen 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 wählt Zeilen nach Kriterien aus, um Zeilen nach Position auszuwählen, verwenden Sie slice . slice data.frame nur zwei Argumente: Das erste ist ein data.frame und das zweite ist ein ganzzahliger data.frame .

So wählen Sie die Zeilen 6 bis 9 aus:

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

Oder:

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

Dies ergibt dieselbe Ausgabe wie slice(mtcars_tbl, 6:9)

n() für die Anzahl der Beobachtungen in der aktuellen Gruppe

ordnen

arrange werden die Daten nach einer oder mehreren angegebenen Variablen sortiert. Genau wie beim vorherigen Verb (und allen anderen Funktionen in dplyr ) ist das erste Argument ein data.frame , und die folgenden Argumente werden zum Sortieren der Daten verwendet. Wenn mehr als eine Variable übergeben wird, werden die Daten zuerst nach der ersten und dann nach der zweiten Variablen usw. sortiert.

So bestellen Sie die Daten mit PS - 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

Um die Daten nach Meilen pro Gallone ( mpg in absteigender Reihenfolge zu arrange , gefolgt von der Anzahl der Zylinder - 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

wählen

select wird verwendet, um nur eine Teilmenge von Variablen auszuwählen. Um nur mpg , disp , wt , qsec und vs aus 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 kann verwendet werden, um aufeinanderfolgende Spalten auszuwählen. So wählen Sie Spalten von cars über disp und vs durch 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

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

Bei Datensätzen, die mehrere Spalten enthalten, kann es mühsam sein, mehrere Spalten nach Namen auszuwählen. Um das Leben zu erleichtern, gibt es eine Reihe von starts_with() (z. B. starts_with() , ends_with() , contains() , matches() , num_range() , one_of() und everything() ), die in select . Weitere ?select_helpers zur Verwendung finden Sie unter ?select_helpers und ?select .

Hinweis : Wenn Sie in select() direkt auf Spalten verweisen, verwenden wir bloße Spaltennamen. In Bezug auf Spalten in Hilfsfunktionen sollten jedoch Anführungszeichen verwendet werden.

Umbenennen von Spalten während der Auswahl:

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

Wie erwartet werden alle anderen Variablen gelöscht.

Um Spalten umzubenennen, ohne andere Variablen zu löschen, verwenden Sie 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>

mutieren

mutate kann verwendet werden, um den Daten neue Spalten hinzuzufügen. Wie alle anderen Funktionen in dplyr fügt dplyr die neu erstellten Spalten nicht zu den ursprünglichen Daten hinzu. Spalten werden am Ende des 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

Beachten Sie die Verwendung von weight_ton beim Erstellen von weight_pounds . Im Gegensatz zu Base R , mutate ermöglicht es uns , auf den Spalten zu verweisen , die wir gerade erstellt , um für einen nachfolgenden Vorgang verwendet werden.

Um nur die neu erstellten Spalten beizubehalten, verwenden Sie transmute statt 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

zusammenfassen

summarise berechnet die Statistikstatistik von Variablen, indem mehrere Werte auf einen einzigen Wert reduziert werden. Es kann mehrere Statistiken berechnen und wir können diese Zusammenfassungsspalten in derselben Anweisung benennen.

So berechnen Sie den Mittelwert und die Standardabweichung von mpg und disp aller Autos im Datensatz:

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

gruppiere nach

group_by können gruppenweise Operationen an Daten ausgeführt werden. Wenn die oben definierten Verben auf diese gruppierten Daten angewendet werden, werden sie automatisch auf jede Gruppe separat angewendet.

mean und sd von mpg nach 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

Alles zusammenfügen

Wir wählen die Spalten von cars über hp und gear , ordnen die Zeilen nach cyl und vom höchsten bis zum niedrigsten mpg , gruppieren die Daten nach gear und schließlich haben nur diese Autos die mpg > 20 und 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

Vielleicht sind wir nicht an den Zwischenergebnissen interessiert, wir können das gleiche Ergebnis wie oben erzielen, indem wir die Funktionsaufrufe umschließen:

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

Dies kann etwas schwierig zu lesen sein. dplyr Vorgänge können also mit dem Operator pipe %>% verkettet werden. Der obige Code übersetzt nach:

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

fassen Sie mehrere Spalten zusammen

dplyr bietet summarise_all() , um Funktionen auf alle (nicht gruppierenden) Spalten anzuwenden.

So ermitteln Sie die Anzahl der unterschiedlichen Werte für jede Spalte:

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

So ermitteln Sie die Anzahl der unterschiedlichen Werte für jede Spalte nach 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

Beachten Sie, dass wir nur die group_by Anweisung hinzufügen group_by und der Rest des Codes derselbe ist. Die Ausgabe besteht jetzt aus drei Zeilen - einer für jeden eindeutigen Wert von cyl .

Um summarise spezifische mehr Spalten, verwenden 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

helper ( ?select_helpers ) anstelle von Spaltennamen verwendet werden , um bestimmte Spalten auswählen

Um mehrere Funktionen anzuwenden, übergeben Sie die Funktionsnamen entweder als Zeichenvektor:

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

oder wickeln Sie sie in 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

Spaltennamen werden jetzt mit Funktionsnamen versehen, um sie voneinander zu trennen. Um dies zu ändern, übergeben Sie den Namen, der mit der Funktion angehängt werden soll:

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

Um bedingte Spalten auszuwählen, verwenden Sie summarise_if :

Nehmen Sie die mean aller Spalten, die numeric von gruppiert 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>

Einige Variablen sind jedoch diskret und der mean dieser Variablen ist nicht sinnvoll.

Den mean von nur kontinuierlichen Variablen nach 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

Teilmengenbeobachtung (Zeilen)

dplyr::filter() - Wählen Sie eine Teilmenge von Zeilen in einem dplyr::filter() , die logische Kriterien erfüllen:

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() - Doppelte Zeilen entfernen:

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

Aggregation mit dem Operator%>% (Pipe)

Der Pipe- Operator (%>%) kann in Kombination mit dplyr Funktionen verwendet werden. In diesem Beispiel verwenden wir das mtcars Dataset (weitere Informationen finden Sie in der help("mtcars") ), um zu zeigen, wie ein Datenrahmen zusammengefasst wird und um den Daten Variablen hinzuzufügen.

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. Summieren Sie die Daten

Für die Berechnung von Statistiken verwenden wir die Funktionen summarize und die entsprechenden Funktionen. In diesem Fall wird n() verwendet, um die Anzahl der Fälle zu zählen.

 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. Berechnen Sie Statistiken nach Gruppe

Es ist möglich, die Statistiken nach Datengruppen zu berechnen. In diesem Fall nach Anzahl der Zylinder und Anzahl der Vorwärtsgänge

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

Beispiele für NSE- und String-Variablen in dpylr

dplyr verwendet Non-Standard Evaluation (NSE), weshalb wir normalerweise die Variablennamen ohne Anführungszeichen verwenden können. Manchmal müssen wir während der Daten-Pipeline jedoch unsere Variablennamen aus anderen Quellen beziehen, z. B. aus einem glänzenden Auswahlfeld. Bei Funktionen wie select können Sie einfach select_ , um eine String-Variable zur Auswahl zu verwenden

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

Wenn Sie jedoch andere Funktionen wie Zusammenfassen oder Filtern verwenden interp müssen Sie die interp Funktion aus dem lazyeval Paket verwenden

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow