수색…


비고

dplyr은 R의 데이터를 조작 할 수있는 유연한 "동사"기반 함수를 제공하는 plyr의 반복입니다. dplyr의 최신 버전은 CRAN에서 다운로드 할 수 있습니다.

install.package("dplyr")

dplyr의 핵심 오브젝트는 표 형식의 데이터 구조를 나타내는 tbl입니다. 현재 dplyr (버전 0.5.0)은 다음을 지원합니다.

  • 데이터 프레임
  • 데이터 테이블
  • SQLite
  • PostgreSQL / Redshift
  • MySQL / MariaDB
  • 빅 쿼리
  • MonetDB
  • 배열을 사용한 데이터 큐브 (부분 구현)

dplyr의 단일 테이블 동사

dplyrR 에서 데이터 조작의 문법을 소개합니다. : 그것은 데이터가 저장되어 상관없이 작동하는 일관된 인터페이스를 제공 data.frame , data.table , 또는 database . dplyr 의 주요 부분은 dplyr 를 사용하여 작성 되므로 메모리 내 데이터로 작업 할 때 매우 빨라집니다.

dplyr 의 철학은 한 가지 일을하는 작은 기능을 갖는 것입니다. 다섯 가지 간단한 기능 ( filter , arrange , select , mutatesummarise )을 사용하여 데이터를 설명하는 새로운 방법을 나타낼 수 있습니다. group_by 와 결합하면이 함수를 사용하여 그룹 별 요약 통계를 계산할 수 있습니다.

구문 공통점

이 모든 함수의 구문은 다음과 같습니다.

  • 이 모든 함수에 대한 첫 번째 인수는 항상 데이터 프레임입니다.
  • 변수 이름을 사용하여 열을 직접 참조 할 수 있습니다 (예 : $ 를 사용하지 않고).
  • 이 함수는 원래 데이터 자체를 수정하지 않습니다. 즉, 부작용이 없습니다. 따라서 결과는 항상 객체에 저장되어야합니다.

내장 된 mtcars 데이터 세트를 사용하여 dplyr 의 단일 테이블 동사를 탐색합니다. 유형 전환 이전 mtcarstbl_df (그것은 인쇄 청소기하게 때문에), 우리는 추가 rownames 사용한 컬럼으로 데이터 세트를 rownames_to_column 으로부터 함수 tibble 패키지.

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 특정 기준과 일치하는 하위 행을 도와줍니다. 첫 번째 인수는 data.frame 의 이름이고 두 번째 (및 후속) 인수는 데이터를 필터링하는 기준입니다 (이러한 조건은 TRUE 또는 FALSE 평가되어야 함)

4 실린더 가있는 모든 자동차를 서브 세트 - 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

여러 기준을 쉼표로 구분하여 전달할 수 있습니다. 4 또는 6 기통 중 하나가있는 차를 하위 집합하려면 - cyl 및 5 개 기어 - 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 는 기준에 따라 행을 선택하고 위치별로 행을 선택하며 slice 사용합니다. slice 는 두 개의 인수 만 취합니다. 첫 번째 인수는 data.frame 이고 두 번째 인수는 정수 행 값입니다.

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

또는:

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

결과적으로 slice(mtcars_tbl, 6:9) 와 같은 출력이됩니다 slice(mtcars_tbl, 6:9)

n() 은 현재 그룹의 관측 수를 나타냅니다.

붙이다

arrange 는 지정된 변수 (들)로 데이터를 정렬하는 데 사용됩니다. 그냥 이전의 동사 (그리고 다른 모든 기능처럼 dplyr ), 첫 번째 인수는이다 data.frame 하고, 이에 따른 인수는 데이터를 정렬하는 데 사용됩니다. 두 개 이상의 변수가 전달되면 데이터는 먼저 첫 번째 변수에 의해 정렬 된 다음 두 번째 변수에 의해 정렬됩니다.

마력으로 데이터를 주문하려면 - 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

갤런 당 마일로 데이터를 arrange 하려면 - 내림차순으로 mpg 하고 그 다음 실린더 수 - 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

고르다

select 는 변수의 하위 집합 만 선택하는 데 사용됩니다. 단지 선택하려면 mpg , disp , wt , qsecvs 에서 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

: 표기법을 사용하여 연속적인 열을 선택할 수 있습니다. 에서 열을 선택하려면 cars 통해 dispvs 를 통해 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

또는 select(mtcars_tbl, -(hp:qsec))

여러 열을 포함하는 데이터 집합의 경우 이름별로 여러 열을 선택하는 것이 지루할 수 있습니다. 인생을 더 쉽게하기 위해, (예 도우미 기능을 제공하고 있습니다 starts_with() , ends_with() , contains() , matches() , num_range() , one_of() , 그리고 everything() 에서 사용할 수) select . 사용 방법에 대한 자세한 내용은 ?select_helpers?select 참조 ?select .

참고 : select() 열을 직접 참조하는 동안 베어 메 트리 이름을 사용하지만 도우미 함수의 열을 참조하는 동안 따옴표를 사용해야합니다.

선택할 때 열의 이름을 바꾸려면 다음을 수행하십시오.

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

예상대로이 변수는 다른 모든 변수를 삭제합니다.

다른 변수를 삭제하지 않고 열의 이름을 바꾸려면 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>

변이시키다

mutate 를 사용하여 데이터에 새 열을 추가 할 수 있습니다. dplyr 다른 모든 함수와 마찬가지로 mutate는 새로 만든 열을 원래 데이터에 추가하지 않습니다. 열은 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

사용 weight_ton 만드는 동안 weight_pounds . 기본 R 과 달리 mutate 는 방금 생성 한 열을 참조하여 후속 작업에 사용하도록 허용합니다.

새로 생성 된 열만 유지하려면 mutate 대신 transmute 를 사용하십시오.

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

요약하다

summarise 여러 값을 단일 값으로 접음으로써 변수의 요약 통계를 계산합니다. 여러 통계를 계산할 수 있으며 동일한 요약에서 이러한 요약 열의 이름을 지정할 수 있습니다.

데이터 집합에있는 모든 차량의 mpgdisp평균표준 편차 를 계산하려면 다음을 수행하십시오.

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

group_by

group_by 는 데이터에 대해 그룹 단위의 작업을 수행하는 데 사용할 수 있습니다. 위에 정의 된 동사가이 그룹화 된 데이터에 적용되면 자동으로 각 그룹에 적용됩니다.

cyl 의한 mpg meansd 를 찾으려면 :

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

그것을 모두 togther

우리의 열 선택 cars 를 통해 hpgear 에 의해 행을 주문, cyl 가장 낮은과 높은에서 mpg 데이터에 의해, 그룹 gear , 그리고 마지막 부분 집합 만 자동차가 mpg > 20 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

어쩌면 중간 결과에 관심이 없기 때문에 함수 호출을 래핑하여 위와 같은 결과를 얻을 수 있습니다.

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

이것은 읽기가 약간 어려울 수 있습니다. 따라서 dplyr 연산은 pipe %>% 연산자를 사용하여 연결될 수 있습니다. 위 코드는 다음과 같이 바뀝니다.

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

여러 열을 요약하다.

dplyr 은 모든 (그룹화되지 않은) 열에 함수를 적용하기 위해 summarise_all() 을 제공합니다.

각 열의 고유 값 수를 찾으려면 다음을 수행하십시오.

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

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

group_by 문을 추가하기 만하면 나머지 코드는 동일하다는 점에 유의하십시오. 출력은 이제 3 개의 행으로 구성됩니다. 하나는 cyl 고유 값입니다.

특정 다중 열을 summarise 하려면 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 )를 사용하여 특정 컬럼을 선택할 수 있습니다

여러 함수를 적용하려면 함수 이름을 문자 벡터로 전달하십시오.

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

또는 funs 감싸 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

열 이름에 함수 이름을 추가하여 고유하게 유지합니다. 이를 변경하려면 함수에 추가 할 이름을 전달하십시오.

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

조건부로 열을 선택하려면 summarise_if 사용 summarise_if .

cyl 그룹화 된 numeric 인 모든 열의 mean 을 취하십시오.

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>

그러나 일부 변수는 불연속이며 이러한 변수의 meanmean 가 없습니다.

cyl 의한 연속 변수의 mean 만 취하기 :

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

부분 집합 관측 (행)

dplyr::filter() - 논리적 기준을 충족하는 데이터 프레임에서 행의 하위 집합을 선택합니다.

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() - 중복 행 제거 :

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

%> % (파이프) 연산자로 집계하기

파이프 (%> %) 연산자dplyr 함수와 함께 사용할 수 있습니다. 이 예제에서는 mtcars 데이터 세트 (자세한 정보는 help("mtcars") 참조)를 사용하여 데이터 프레임을 합계하는 방법을 보여주고 함수 적용 결과로 데이터에 변수를 추가합니다.

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. 데이터 합계

통계를 계산하기 위해 summarize 과 적절한 함수를 사용합니다. 이 경우 n() 은 사례 수를 계산하는 데 사용됩니다.

 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. 그룹 별 통계 계산

데이터 그룹별로 통계를 계산할 수 있습니다. 이 경우 실린더 수와 전진 기어 수

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

dpylr의 NSE 및 문자열 변수의 예

dplyr 는 NSE (Non-Standard Evaluation)를 사용합니다. 따라서 우리는 일반적으로 따옴표없이 변수 이름을 사용할 수 있습니다. 그러나 때로는 데이터 파이프 라인 중에 Shiny 선택 상자와 같은 다른 소스에서 변수 이름을 가져와야합니다. select 와 같은 함수의 경우 select_ 를 사용하여 문자열 변수를 사용하여 선택할 수 있습니다.

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

그러나 요약이나 필터와 같은 다른 기능을 사용하려면 lazyeval 패키지의 interp 함수를 lazyeval 합니다.

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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow