Data Pre-processing by dplyr
MinSoon Lim
1. Intro
해당 문서는 R Markdown
을 이용하여 제작했으며 dplyr
패키지를 이용한 데이터 전처리(Pre-processing
)에 대한 것 입니다. 예제 데이터로는 ggplot2
패키지에 있는 diamonds
데이터를 사용했습니다. 먼저 전처리가 무엇인지에 대해 알아보고 dplyr
패키지에 어떤 함수가 있는지 그리고 함수들을 어떻게 사용하는지 순서대로 서술하겠습니다.
1 - 1. 데이터 전처리란?
데이터 전처리란 작업 할 raw data
를 구성하는 관측치와 변수들을 제거, 수정 혹은 추가하여 최종적으로 분석에 사용할 Data Set
을 만드는 과정을 말합니다. 예를 몇 가지 들자면 다음과 같습니다.
- 성별(sex)을 0, 1로 기입해 놓은 경우 보기 좋게 male, female 로
변경
하는 것 - 가구 회사에서 의자와 책상을 만들기 위해서 신장과 체중만 있으면 되는 경우 그 외에 불필요한 변수들(주거지, 최종 학력 등)은
제거
하는 것. - 학생들의 교육 성취도 조사를 하려는데 1년치 자료만 있는 경우 과거 기록도
추가
하는 경우
1 - 2. 왜 dplyr
패키지 인가?
dplyr
패키지의 가장 큰 장점은 %>%
(파이프, Pipe) 연산자라고 생각합니다. 전처리 외에도 파이프 연산자 덕에 가독성이 굉장히 좋아집니다. 수학적으로 말하자면 합성함수 o(circle)와 유사한 기능을 합니다. 다만 둘의 차이점은 합성함수 (f o g)(x) == f(g(x)) 처럼 뒤에서부터 앞의 순서로 계산하지만 dplyr
의 파이프 연산자는
DataFrame
%>% function1()
%>% function2()
순서대로 진행됩니다.
2. dplyr
패키지에 있는 함수들
dplyr
패키지에 있는 많은 함수들 중 해당 글에서 설명할 함수들은 다음과 같습니다.
- select()
- filter()
- rename()
- mutate()
- summarize() ( or summarise() )
- group_by()
- arrange()
- sample_n() & sample_frac()
3 - 1. 패키지 장착
library(dplyr)
library(ggplot2)
3 - 2. 예제 데이터 확인
ggplot2::diamonds
## # A tibble: 53,940 x 10
## carat cut color clarity depth table price x y z
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 0.230 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43
## 2 0.210 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31
## 3 0.230 Good E VS1 56.9 65.0 327 4.05 4.07 2.31
## 4 0.290 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63
## 5 0.310 Good J SI2 63.3 58.0 335 4.34 4.35 2.75
## 6 0.240 Very Good J VVS2 62.8 57.0 336 3.94 3.96 2.48
## 7 0.240 Very Good I VVS1 62.3 57.0 336 3.95 3.98 2.47
## 8 0.260 Very Good H SI1 61.9 55.0 337 4.07 4.11 2.53
## 9 0.220 Fair E VS2 65.1 61.0 337 3.87 3.78 2.49
## 10 0.230 Very Good H VS1 59.4 61.0 338 4.00 4.05 2.39
## # ... with 53,930 more rows
관측치 53,940개, 변수 10개로 이루어진 데이터임을 알 수 있다. 이 외에도 데이터를 확인하는 다양한 함수들은 다음과 같은 것들이 있다.
summary()
DT::datatable()
str()
dplyr::glimpse()
4. select()
dim(DataName)
의 결과값을 순서대로 m, n 이라 할 때 m은 관측치의 갯수, n은 변수의 개수라는 뜻이다. 이 때 연구자 본인이 판단했을 때 전체 n개의 변수 중에서 필요한 변수들만 선택(추출) 하는 함수가 dplyr::select()이다.
기본적인 입력 방식은 다음과 같다.
DataFrame %>%
select(VariableName)
4 - 1. color 변수만
diamonds %>%
select(color)
## # A tibble: 53,940 x 1
## color
## <ord>
## 1 E
## 2 E
## 3 E
## 4 I
## 5 J
## 6 J
## 7 I
## 8 H
## 9 E
## 10 H
## # ... with 53,930 more rows
4 - 2. 변수를 2개 이상 select 할 경우
cut, color 변수 추출
diamonds %>%
select(cut, color)
## # A tibble: 53,940 x 2
## cut color
## <ord> <ord>
## 1 Ideal E
## 2 Premium E
## 3 Good E
## 4 Premium I
## 5 Good J
## 6 Very Good J
## 7 Very Good I
## 8 Very Good H
## 9 Fair E
## 10 Very Good H
## # ... with 53,930 more rows
4 - 3. 변수의 이름은 모르고 위치를 아는 경우
DataName %>% select(Vector) 형태로 입력해주면 된다.
diamonds %>%
select(1:4)
## # A tibble: 53,940 x 4
## carat cut color clarity
## <dbl> <ord> <ord> <ord>
## 1 0.230 Ideal E SI2
## 2 0.210 Premium E SI1
## 3 0.230 Good E VS1
## 4 0.290 Premium I VS2
## 5 0.310 Good J SI2
## 6 0.240 Very Good J VVS2
## 7 0.240 Very Good I VVS1
## 8 0.260 Very Good H SI1
## 9 0.220 Fair E VS2
## 10 0.230 Very Good H VS1
## # ... with 53,930 more rows
4 - 4. 변수 시작하는 스펠링을 알 때
dplyr::select(starts_with()) diamonds 데이터에서 c로 시작하는 변수들만 선택
diamonds %>%
select(starts_with("c"))
## # A tibble: 53,940 x 4
## carat cut color clarity
## <dbl> <ord> <ord> <ord>
## 1 0.230 Ideal E SI2
## 2 0.210 Premium E SI1
## 3 0.230 Good E VS1
## 4 0.290 Premium I VS2
## 5 0.310 Good J SI2
## 6 0.240 Very Good J VVS2
## 7 0.240 Very Good I VVS1
## 8 0.260 Very Good H SI1
## 9 0.220 Fair E VS2
## 10 0.230 Very Good H VS1
## # ... with 53,930 more rows
4 - 5. 변수의 끝나는 스펠링
diamonds 데이터에서 e로 끝나는 변수들만 선택
diamonds %>%
select(ends_with("e"))
## # A tibble: 53,940 x 2
## table price
## <dbl> <int>
## 1 55.0 326
## 2 61.0 326
## 3 65.0 327
## 4 58.0 334
## 5 58.0 335
## 6 57.0 336
## 7 57.0 336
## 8 55.0 337
## 9 61.0 337
## 10 61.0 338
## # ... with 53,930 more rows
4 - 6. 변수에 포함된 스펠링을 아는 경우
diamonds 데이터에서 r이 들어간 변수들 선택
diamonds %>%
select(contains("r"))
## # A tibble: 53,940 x 4
## carat color clarity price
## <dbl> <ord> <ord> <int>
## 1 0.230 E SI2 326
## 2 0.210 E SI1 326
## 3 0.230 E VS1 327
## 4 0.290 I VS2 334
## 5 0.310 J SI2 335
## 6 0.240 J VVS2 336
## 7 0.240 I VVS1 336
## 8 0.260 H SI1 337
## 9 0.220 E VS2 337
## 10 0.230 H VS1 338
## # ... with 53,930 more rows
5. filter() : 조건에 맞는 관측치 추출
행(관측치) 추출 할 때 사용한다. 내가 원하는 조건에 맞는 관측치만 고르는 함수
5 - 1. price가 950 이하인 다이아만 추출
diamonds %>%
filter(price <= 950)
## # A tibble: 13,490 x 10
## carat cut color clarity depth table price x y z
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 0.230 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43
## 2 0.210 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31
## 3 0.230 Good E VS1 56.9 65.0 327 4.05 4.07 2.31
## 4 0.290 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63
## 5 0.310 Good J SI2 63.3 58.0 335 4.34 4.35 2.75
## 6 0.240 Very Good J VVS2 62.8 57.0 336 3.94 3.96 2.48
## 7 0.240 Very Good I VVS1 62.3 57.0 336 3.95 3.98 2.47
## 8 0.260 Very Good H SI1 61.9 55.0 337 4.07 4.11 2.53
## 9 0.220 Fair E VS2 65.1 61.0 337 3.87 3.78 2.49
## 10 0.230 Very Good H VS1 59.4 61.0 338 4.00 4.05 2.39
## # ... with 13,480 more rows
5 - 2.숫자 조건이 두 가지인 경우 : & , |
다이아몬드 가격이 950 이하이고, 800이상인 것만 고를 때
diamonds %>%
filter(price <= 950 & price >= 800)
## # A tibble: 3,707 x 10
## carat cut color clarity depth table price x y z
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 0.410 Very Good G VS2 61.4 57.0 800 4.76 4.81 2.94
## 2 0.320 Ideal F VVS2 62.1 55.0 800 4.37 4.39 2.72
## 3 0.320 Ideal F VVS2 61.2 57.0 800 4.42 4.44 2.71
## 4 0.320 Ideal F VVS2 60.9 56.0 800 4.44 4.46 2.71
## 5 0.320 Ideal F VVS2 61.2 55.0 800 4.43 4.46 2.72
## 6 0.380 Ideal I VVS1 62.4 54.8 800 4.64 4.66 2.90
## 7 0.400 Ideal H VS2 61.6 57.0 800 4.71 4.74 2.91
## 8 0.360 Ideal D VS2 61.8 55.0 800 4.58 4.61 2.84
## 9 0.310 Ideal E VS1 62.0 55.0 800 4.35 4.38 2.70
## 10 0.310 Ideal E VS1 61.7 53.0 800 4.36 4.39 2.70
## # ... with 3,697 more rows
6. rename()
데이터를 이루는 기존 변수들의 변수명을 바꾸는 경우에 사용. 데이터 분석을 하다보면 간혹 RawData
들의 변수명이 V1, V2, V3, …. 식으로 나와있고 별도로 CodeBook
이 같이 있는 경우가 있다. 이런 경우 분석에 필요한 몇가지 변수들의 이름을 좀 더 직관적으로 편하게 알아볼 수 있도록 변환 할 때 사용하는 것이 rename()
이다.
입력 방식은 다음과 같이 새로 저장할 변수명
= 기존 변수명
형태로 넣어주면 된다.
DataFrame %>% rename(New.Vaiable.Name = Variable.Name)
diamonds 데이터 중에 x, y, z 변수들을 각각 width, length, heigth 로 변경하고 colnames()를 이용하여 변환된 변수명들을 확인해보자.
diamonds <- diamonds %>%
rename(width = x,
length = y,
heigth = z)
colnames(diamonds)
## [1] "carat" "cut" "color" "clarity" "depth" "table" "price"
## [8] "width" "length" "heigth"
7. mutate()
위에 서술한 rename()은 변수명만 변환할 때 사용하는 것이다. 지금 설명할 mutate()는 기존에 존재하던 변수들을 이용하여 파생변수를 만들거나 기존 변수를 변환할 때 사용한다. 입력방식은 rename()과 유사하게 변환명
= 기존 변수명
형태로 입력하면 된다.
기존에 있던 price
를 이용하여 3933 이상을 Expensive
, 그 외에는 Cheap
이라는 질적 자료로 이루어진 price2
파생변수를 만들어보자.
diamonds <- diamonds %>%
mutate(price2 = ifelse(price >= 3933, "Expensive", "Cheap"))
str(diamonds)
## Classes 'tbl_df', 'tbl' and 'data.frame': 53940 obs. of 11 variables:
## $ carat : num 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
## $ cut : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
## $ color : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
## $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
## $ depth : num 61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
## $ table : num 55 61 65 58 58 57 57 55 61 61 ...
## $ price : int 326 326 327 334 335 336 336 337 337 338 ...
## $ width : num 3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
## $ length : num 3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
## $ heigth : num 2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...
## $ price2 : chr "Cheap" "Cheap" "Cheap" "Cheap" ...
만약에 범주를 2개 이상으로 나누고 싶다면, ifelse()를 2번 이상 사용해주면 된다. 예를 들어 price
가 5324 이상인 것들을 High
, 950 이상부터 5324 미만을 Middle
, 950 미만을 Low
로 하는 질적자료 price3
파생변수를 만들어보자.
diamonds <- diamonds %>%
mutate(price3 = ifelse(price >= 5324, "High",
ifelse(price >= 950, "Middle", "Low")))
str(diamonds)
## Classes 'tbl_df', 'tbl' and 'data.frame': 53940 obs. of 12 variables:
## $ carat : num 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
## $ cut : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
## $ color : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
## $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
## $ depth : num 61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
## $ table : num 55 61 65 58 58 57 57 55 61 61 ...
## $ price : int 326 326 327 334 335 336 336 337 337 338 ...
## $ width : num 3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
## $ length : num 3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
## $ heigth : num 2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...
## $ price2 : chr "Cheap" "Cheap" "Cheap" "Cheap" ...
## $ price3 : chr "Low" "Low" "Low" "Low" ...
8. summarize()
연구자 본인이 원하는 요약 통계량을 구할 때 사용하는 함수이다. R 에서 기본적으로 지원해주는 요약 통계량 함수들은 아래와 같다.
요약 통계량 | 함수 |
---|---|
최솟값 | min() |
최댓값 | max() |
평균 | mean() |
합 | sum() |
분산 | var() |
표준편차 | sd() |
중앙값 | median() |
사분위 범위 | IQR() |
이 외에도 데이터를 이루는 혹은 그룹별 관측치의 갯수를 구하는 n(), 변수의 고유한 범주들의 갯수를 알려주는 n_distinct() 등이 있다.
아래는 summarize() 함수를 이용하여 순서대로 다이아몬드 데이터의 전체 관측치 개수, cut 변수의 고유 범주들의 수, 여러 다이아들중에 가장 비싼 가격을 구하여 dia.table
에 저장하는 코드이다.
dia.table <- diamonds %>%
summarize(n.obs = n(),
n.cut = n_distinct(cut),
max.price = max(price))
dia.table
## # A tibble: 1 x 3
## n.obs n.cut max.price
## <int> <int> <dbl>
## 1 53940 5 18823
9. group_by()
데이터에 있는 질적 자료들 별로 그룹핑(or Clustering) 해주는 함수이다. DataFrame %>% group_by(VariableName) 형태로 입력해주면 되며, summarize()와 함께 사용할 경우 그룹별 요약통계량을 구해주기 때문에 더욱 강력하다.
아래와 같이 실행하면 cut
의 범주별로 그룹을 만든 후 그룹별 관측치 개수, 최고가, 평균 carat
을 구할 수 있다.
diamonds %>%
group_by(cut) %>%
summarize(n.obs = n(),
max.price = max(price),
mean.carat = mean(carat))
## # A tibble: 5 x 4
## cut n.obs max.price mean.carat
## <ord> <int> <dbl> <dbl>
## 1 Fair 1610 18574 1.05
## 2 Good 4906 18788 0.849
## 3 Very Good 12082 18818 0.806
## 4 Premium 13791 18823 0.892
## 5 Ideal 21551 18806 0.703
여기서 한 가지 추가한다면 cut의 순서가 Fair, Good, Very Good, Ideal, Premium 인 것이 더 보기 편하다.
위에 서술한 mutate()를 이용하여 수정한다면 아래와 같이 하면 된다.
diamonds %>%
mutate(cut = factor(diamonds$cut,
levels = c("Fair", "Good", "Very Good",
"Ideal", "Premium"))) %>%
group_by(cut) %>%
summarize(n.obs = n(),
max.price = max(price),
mean.carat = mean(carat))
## # A tibble: 5 x 4
## cut n.obs max.price mean.carat
## <ord> <int> <dbl> <dbl>
## 1 Fair 1610 18574 1.05
## 2 Good 4906 18788 0.849
## 3 Very Good 12082 18818 0.806
## 4 Ideal 21551 18806 0.703
## 5 Premium 13791 18823 0.892
10. arrange()
연구자가 선택한 변수에 대하여 오름차순 혹은 내림차순으로 나열하게 해주는 함수로서 디폴트는 오름차순으로 되어있다. 단순하게 다이아몬드 가격에 대해 오름차순으로 나열하고 싶다면 아래와 같이 실행하면 된다.
diamonds %>%
arrange(price)
## # A tibble: 53,940 x 12
## carat cut color clarity depth table price width length heigth price2
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <chr>
## 1 0.230 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43 Cheap
## 2 0.210 Premi~ E SI1 59.8 61.0 326 3.89 3.84 2.31 Cheap
## 3 0.230 Good E VS1 56.9 65.0 327 4.05 4.07 2.31 Cheap
## 4 0.290 Premi~ I VS2 62.4 58.0 334 4.20 4.23 2.63 Cheap
## 5 0.310 Good J SI2 63.3 58.0 335 4.34 4.35 2.75 Cheap
## 6 0.240 Very ~ J VVS2 62.8 57.0 336 3.94 3.96 2.48 Cheap
## 7 0.240 Very ~ I VVS1 62.3 57.0 336 3.95 3.98 2.47 Cheap
## 8 0.260 Very ~ H SI1 61.9 55.0 337 4.07 4.11 2.53 Cheap
## 9 0.220 Fair E VS2 65.1 61.0 337 3.87 3.78 2.49 Cheap
## 10 0.230 Very ~ H VS1 59.4 61.0 338 4.00 4.05 2.39 Cheap
## # ... with 53,930 more rows, and 1 more variable: price3 <chr>
# 만약 내림차순으로 하고 싶다면
# diamonds %>%
# arrange(desc(price))
11. sample_n() & sample_frac()
전체 관측치(모집단)에서 표본 집단을 뽑을 때 사용하는 함수이며 디폴트는 비복원 추출이다. 재현 가능한 연구를 위해서는 set.seed()를 이용해서 seed 를 지정해줘야 하며 복원 추출을 하고 싶은 경우 replace = TRUE 로 설정해주면 된다. 원하는 갯수만큼 추출하는 경우에는 sample_n()을, 비율로 추출하는 경우에는 sample_frac()을 이용하면 된다.
# 전체 관측치 중에서 100개만 비복원 추출
diamonds %>%
sample_n(100)
## # A tibble: 100 x 12
## carat cut color clarity depth table price width length heigth price2
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <chr>
## 1 0.520 Very ~ E VS2 60.3 60.0 1689 5.17 5.21 3.13 Cheap
## 2 0.900 Very ~ E VS2 62.2 56.0 4707 6.12 6.17 3.82 Expen~
## 3 0.300 Premi~ E VS2 61.8 58.0 658 4.31 4.36 2.68 Cheap
## 4 0.850 Ideal H SI2 61.8 54.0 2659 6.10 6.07 3.76 Cheap
## 5 0.650 Premi~ F SI1 61.4 57.8 1748 5.50 5.56 3.39 Cheap
## 6 0.350 Very ~ H SI1 61.3 55.0 504 4.55 4.58 2.80 Cheap
## 7 1.00 Very ~ H SI1 62.0 54.0 4995 6.43 6.47 4.00 Expen~
## 8 0.740 Premi~ I SI2 60.6 60.0 1803 5.89 5.80 3.54 Cheap
## 9 1.01 Very ~ D VS2 59.8 60.0 6563 6.42 6.46 3.85 Expen~
## 10 1.01 Very ~ F VS2 59.2 59.0 6257 6.49 6.61 3.88 Expen~
## # ... with 90 more rows, and 1 more variable: price3 <chr>
# 100개만 복원 추출
diamonds %>%
sample_n(100,
replace = T)
## # A tibble: 100 x 12
## carat cut color clarity depth table price width length heigth price2
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <chr>
## 1 1.13 Ideal G VVS1 61.2 57.0 9214 6.72 6.65 4.09 Expen~
## 2 0.400 Very ~ D VS1 64.0 57.0 995 4.66 4.69 2.99 Cheap
## 3 0.740 Premi~ E SI1 61.4 57.0 2042 5.83 5.79 3.57 Cheap
## 4 1.05 Good E SI1 64.2 61.0 4967 6.41 6.33 4.09 Expen~
## 5 0.330 Ideal F VS2 61.3 56.0 854 4.47 4.43 2.73 Cheap
## 6 0.350 Premi~ G VVS2 62.8 58.0 1024 4.48 4.44 2.80 Cheap
## 7 1.03 Very ~ F SI1 62.5 59.0 4282 6.41 6.45 4.02 Expen~
## 8 1.50 Very ~ D VS2 63.8 55.0 13629 7.24 7.28 4.63 Expen~
## 9 0.350 Ideal E SI1 60.9 55.0 788 4.57 4.53 2.77 Cheap
## 10 1.04 Premi~ G VS2 61.8 58.0 6709 6.51 6.46 4.01 Expen~
## # ... with 90 more rows, and 1 more variable: price3 <chr>
# 전체 데이터중에 30% 비복원 추출
diamonds %>%
sample_frac(.3)
## # A tibble: 16,182 x 12
## carat cut color clarity depth table price width length heigth price2
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <chr>
## 1 1.50 Premi~ G SI2 58.5 62.0 8736 7.44 7.40 4.34 Expen~
## 2 0.730 Premi~ H SI2 61.2 58.0 2102 5.84 5.80 3.56 Cheap
## 3 0.900 Very ~ E SI1 61.7 58.0 4795 6.15 6.20 3.81 Expen~
## 4 1.00 Fair G SI2 64.9 57.0 3027 6.29 6.20 4.05 Cheap
## 5 0.610 Ideal D VVS2 62.2 54.0 3397 5.41 5.45 3.38 Cheap
## 6 0.350 Ideal D VS1 61.0 56.0 1065 4.53 4.58 2.78 Cheap
## 7 0.510 Premi~ I VS2 62.9 55.0 1179 5.12 5.08 3.21 Cheap
## 8 0.410 Premi~ E VS1 61.2 58.0 1153 4.78 4.76 2.92 Cheap
## 9 0.310 Ideal D SI1 62.4 56.0 732 4.35 4.31 2.70 Cheap
## 10 0.970 Ideal J VS1 61.3 57.0 4278 6.37 6.41 3.92 Expen~
## # ... with 16,172 more rows, and 1 more variable: price3 <chr>
# 전체 데이터중에 30% 복원 추출
diamonds %>%
sample_frac(.3,
replace = T)
## # A tibble: 16,182 x 12
## carat cut color clarity depth table price width length heigth price2
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <chr>
## 1 0.410 Very ~ D VS1 61.7 58.0 1018 4.76 4.80 2.95 Cheap
## 2 0.400 Ideal G SI1 60.1 56.0 1084 4.80 4.85 2.90 Cheap
## 3 1.07 Ideal E VVS2 62.3 56.0 10133 6.51 6.61 4.09 Expen~
## 4 0.580 Ideal D VVS2 63.0 56.0 2421 5.35 5.28 3.35 Cheap
## 5 0.270 Ideal E VVS2 61.8 57.0 622 4.12 4.16 2.56 Cheap
## 6 0.320 Very ~ D SI1 63.3 57.0 756 4.39 4.36 2.77 Cheap
## 7 1.01 Very ~ E SI1 63.1 57.0 5085 6.33 6.44 4.03 Expen~
## 8 0.430 Premi~ F SI1 62.5 56.0 1016 4.85 4.82 3.02 Cheap
## 9 1.51 Premi~ I VS2 60.5 59.0 9682 7.44 7.41 4.49 Expen~
## 10 0.310 Premi~ E VS2 62.6 58.0 872 4.33 4.29 2.70 Cheap
## # ... with 16,172 more rows, and 1 more variable: price3 <chr>
12. Ref
- 따라하며 배우는 데이터 과학 - 출판사 : 제이펍 & 저자 : 권재명 박사님
- Do it! 쉽게 따라하며 배우는 R - 출판사 : 이지스 퍼블리싱 & 저자 : 김영우
- R과 함께한 데이터 여행 - 출판사 : 경문사 & 저자 : 이부일, 이서현