R Language
디 핑거
수색…
비고
dplyr은 R의 데이터를 조작 할 수있는 유연한 "동사"기반 함수를 제공하는 plyr의 반복입니다. dplyr의 최신 버전은 CRAN에서 다운로드 할 수 있습니다.
install.package("dplyr")
dplyr의 핵심 오브젝트는 표 형식의 데이터 구조를 나타내는 tbl입니다. 현재 dplyr (버전 0.5.0)은 다음을 지원합니다.
- 데이터 프레임
- 데이터 테이블
- SQLite
- PostgreSQL / Redshift
- MySQL / MariaDB
- 빅 쿼리
- MonetDB
- 배열을 사용한 데이터 큐브 (부분 구현)
dplyr의 단일 테이블 동사
dplyr 은 R
에서 데이터 조작의 문법을 소개합니다. : 그것은 데이터가 저장되어 상관없이 작동하는 일관된 인터페이스를 제공 data.frame , data.table , 또는 database
. dplyr
의 주요 부분은 dplyr
를 사용하여 작성 되므로 메모리 내 데이터로 작업 할 때 매우 빨라집니다.
dplyr
의 철학은 한 가지 일을하는 작은 기능을 갖는 것입니다. 다섯 가지 간단한 기능 ( filter
, arrange
, select
, mutate
및 summarise
)을 사용하여 데이터를 설명하는 새로운 방법을 나타낼 수 있습니다. group_by
와 결합하면이 함수를 사용하여 그룹 별 요약 통계를 계산할 수 있습니다.
구문 공통점
이 모든 함수의 구문은 다음과 같습니다.
- 이 모든 함수에 대한 첫 번째 인수는 항상 데이터 프레임입니다.
- 변수 이름을 사용하여 열을 직접 참조 할 수 있습니다 (예 :
$
를 사용하지 않고). - 이 함수는 원래 데이터 자체를 수정하지 않습니다. 즉, 부작용이 없습니다. 따라서 결과는 항상 객체에 저장되어야합니다.
내장 된 mtcars 데이터 세트를 사용하여 dplyr
의 단일 테이블 동사를 탐색합니다. 유형 전환 이전 mtcars
에 tbl_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
, qsec
및 vs
에서 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
통해 disp
및 vs
를 통해 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
여러 값을 단일 값으로 접음으로써 변수의 요약 통계를 계산합니다. 여러 통계를 계산할 수 있으며 동일한 요약에서 이러한 요약 열의 이름을 지정할 수 있습니다.
데이터 집합에있는 모든 차량의 mpg
및 disp
의 평균 및 표준 편차 를 계산하려면 다음을 수행하십시오.
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
mean
과 sd
를 찾으려면 :
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
를 통해 hp
와 gear
에 의해 행을 주문, 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>
그러나 일부 변수는 불연속이며 이러한 변수의 mean
은 mean
가 없습니다.
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