dplyr는 data handling을 위한 R에서 사용하는 필수 패키지 입니다. 그럼, dpyr에서 사용되는 기본 함수인 아래 3종류의 함수에 대해 알아보겠습니다.
- arrange()
- distinct()
- slice()
library(dplyr)
##
## 다음의 패키지를 부착합니다: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
예제에 사용할 간단한 data.frame을 하나 만들어 보겠습니다.
x = c(10,20,20,30,10,20,10,30,30)
y = c(101,103,102,93,92,87,80,75,72)
z = c(50,51,52,45,12,22,34,56,12)
m = c(rep("a",4),rep("b",5))
n = seq(1,9)
df = data.frame(x,m, y, z,n)
#`r text_spec("Help Help", background = "#D05A6E", color = "white", bold = T)`
1. arrange
arrange()는 데이터의 순서를 정렬해주는 함수입니다. 기본값으로 오름차순(작은값 -> 큰값) 정리를 하며, desc를 적용하면 내림차순(큰값 -> 작은값)으로 정렬합니다. y값을 오름차순으로 정렬한 결과 입니다.
df %>% arrange(desc(y))
## x m y z n
## 1 20 a 103 51 2
## 2 20 a 102 52 3
## 3 10 a 101 50 1
## 4 30 a 93 45 4
## 5 10 b 92 12 5
## 6 20 b 87 22 6
## 7 10 b 80 34 7
## 8 30 b 75 56 8
## 9 30 b 72 12 9
y를 desc로 내림차순으로 정리한 결과 입니다.
group별로 순서를 정렬할 때는, group_by를 적용 후, arrange함수안에서 .by_group=TRUE 옵션을 적용해야 합니다.
df %>% group_by(x) %>% arrange(desc(y), .by_group = TRUE)
## # A tibble: 9 × 5
## # Groups: x [3]
## x m y z n
## <dbl> <chr> <dbl> <dbl> <int>
## 1 10 a 101 50 1
## 2 10 b 92 12 5
## 3 10 b 80 34 7
## 4 20 a 103 51 2
## 5 20 a 102 52 3
## 6 20 b 87 22 6
## 7 30 a 93 45 4
## 8 30 b 75 56 8
## 9 30 b 72 12 9
x 안에서 y가 내림차순으로 정렬된 것을 볼 수 있습니다.
2. distinct
distinct()는 unique()와 같은 역할을 하는 함수입니다. column내에서 고유값만을 추출해주는 함수 입니다.
df %>% distinct(x)
## x
## 1 10
## 2 20
## 3 30
.keep_all은 distinct()를 적용한 column을 제외한 나머지 column들도 보여주는 옵션입니다.
df %>% distinct(x, .keep_all = TRUE)
## x m y z n
## 1 10 a 101 50 1
## 2 20 a 103 51 2
## 3 30 a 93 45 4
3. slice
slice()는 row를 중심으로 원하는 row의 갯수를 추출 하는 함수입니다.
또, group_by()와 함께 적용 할 수 있습니다. 그룹별 순서에 해당하는 행을 추출 합니다.
df %>% group_by(m) %>% slice(2,4)
## # A tibble: 4 × 5
## # Groups: m [2]
## x m y z n
## <dbl> <chr> <dbl> <dbl> <int>
## 1 20 a 103 51 2
## 2 30 a 93 45 4
## 3 20 b 87 22 6
## 4 30 b 75 56 8
y를 기준으로 큰 값 순서대로 2개 행을 출력해보겠습니다.
df %>% slice_max(order_by = y, n = 2)
## x m y z n
## 1 20 a 103 51 2
## 2 20 a 102 52 3
x를 기준으로 max를 출력해보겠습니다. x에는 10, 20, 30이 각각 3개씩 들어 있습니다. 여기서 n = 4를 적용하며, x에서 제일 큰값인 30에 해당하는 행과 그 다음 20에 해당하는 행이 모두 출력되는 것을 알 수 있습니다.
df %>% slice_max(order_by = x, n = 4)
## x m y z n
## 1 30 a 93 45 4
## 2 30 b 75 56 8
## 3 30 b 72 12 9
## 4 20 a 103 51 2
## 5 20 a 102 52 3
## 6 20 b 87 22 6
slice_min()은 column을 기준으로 작은값을 순서대로 출력합니다.
df %>% slice_min(order_by = y, n = 1)
## x m y z n
## 1 30 b 72 12 9
slice_sample()은 랜덤한 행을 출력합니다. n대신 prop을 사용하여 비율을 지정해줘도 됩니다.
df %>% slice_sample(n = 3)
## x m y z n
## 1 10 b 92 12 5
## 2 10 b 80 34 7
## 3 20 b 87 22 6
df %>% slice_sample(prop = 0.3)
## x m y z n
## 1 30 b 72 12 9
## 2 20 a 102 52 3
df %>% filter(x == 10)
## x m y z n
## 1 10 a 101 50 1
## 2 10 b 92 12 5
## 3 10 b 80 34 7
slice()에 n()을 적용하면 마지막 행을 출력합니다.
df %>% slice(n())
## x m y z n
## 1 30 b 72 12 9
'R' 카테고리의 다른 글
[preprocessing] 결측값(NA) 찾기 (colSums(is.na()), complete.cases(), filter(), filter_all(), select_if()) (1) | 2023.08.25 |
---|---|
[caret] caret을 활용한 머신러닝 모델 구축 (1) | 2023.08.07 |
[tidymodels] tidymodels를 활용한 머신러닝 모델 구축하기 (0) | 2023.07.31 |
[dplyr] select, filter, mutate, summarise로 데이터 다루기 (0) | 2023.07.26 |