본문 바로가기
R Programming

R 기초: sample( ) 함수

by 블루드래곤 2019. 10. 31.
728x90

* sample( ) 함수:

벡터(vector) 혹은 데이터 프레임(data frame)에서 지정된 크기만큼 데이터를 무작위로 추출할 때 사용하는 함수이다. 이 함수는 트레이닝 데이터 및 테스트 데이터 분할 등 다양한 분야에서 유용하게 사용할 수 있다. 구체적은 사용 방법은 다음과 같다.

 

*기본 사용법(replace = FALSE)

우선 R 공식 사이트에서 제공하는 기본 사용법은 다음과 같다.

sample(x, size, replace = FALSE, prob = NULL)

 

기본 사용법에서 알 수 있듯이 sample( ) 함수의 기본 설정은 한번 추출한 값은 제외하는 비복원 추출(replace = FALSE) 방법을 사용하고 있다.  아래 예제를 통해 기본 사용 방법을 알아보도록 하자.

 

예제1: 벡터(vector)에서 무작위로 데이터를 추출할 때

> sample(1:10, 3)     #1부터 10사이 값에서 무작위로 3개 추출 
[1] 1 5 3

> sample(1:50, 4)     #1부터 50사이 값에서 무작위로 4개 추출
[1] 41  6 31 50

> sample(1:50, 5)     #1부터 100사이 값에서 무작위로 5개 추출
[1] 28  6 35  8 19

 

예제2: 데이터 프레임(data frame)에서 무작위로 데이터를 추출할 때

> temp <- data.frame(x1 = c(1, 3, 4, 5, 6),     
+                    x2 = c(2, 4, 6, 7, 8),     
+                    x3 = c(4, 7, 8, 9, 3))
 
 
> temp
  x1 x2 x3
1  1  2  4
2  3  4  7
3  4  6  8
4  5  7  9
5  6  8  3


> sample(temp$x1, 3)
[1] 1 5 3

 

*replace = TRUE일 때 사용법

이 경우는 한번 추출한 값을 기존 데이터 다시 넣고 추출에 사용한다. 즉, 복원 추출 방법을 사용하기 때문에 출력되는 값이 중복될 수 있다. 구체적인 사용 방법은 다음과 같다.

> sample(1:10, 5, replace = TRUE)    #1부터 10사이 값에서 무작위로 5개를 복원 추출
[1] 10  1  5  5  2

> sample(1:50, 5, replace = TRUE)    #1부터 50사이 값에서 무작위로 5개를 복원 추출
[1] 49 17 19 33 27

> sample(1:99, 5, replace = TRUE)    #1부터 99사이 값에서 무작위로 5개를 복원 추출
[1]  2 59 76 43 42

 

*prob 파마미터 사용법

이 경우는 입력 벡터 값이 추출될 수 있는 확률을 사전에 설정할 때 사용된다. 구체적으로 다음과 같이 사용된다. 예를 들어 TRUE, FALE 데이터가 있을 때 TRUE가 선택될 수 있는 확률를 0.7. FALSE가 선택될 수 있는 확률을 0.3으로 설정할 수 있다.

sample(c(TRUE, FALSE), 5, replace = TRUE, prob = c(0.7, 0.3))
[1]  TRUE FALSE FALSE  TRUE  TRUE

 

** 데이터셋을 분리할 때 아래와 같이 sample( ) 함수를 적용하면 유용하게 사용할 수 있다.

> dataset <- datasets::iris  ## 데이터 저장 

> nrow(dataset)              ## 행 개수 확인 
[1] 150

> which <- sample(c(TRUE, FALSE), nrow(dataset), replace = TRUE, prob = c(0.8, 0.2))  ##TRUE 80%,  FALSE 20% 분할

> train <- dataset[which,]  ## TRUE 값 추출
> test <- dataset[!which,]  ## FALSE 값 추출 

> nrow(train)  ## 트레이닝 데이터 행 개수 확인
[1] 124

> nrow(test)   ## 테스트 데이터 행 개수 확인
[1] 26

댓글