더북(TheBook)

sampleBy()

sampleBy( )는 데이터를 그룹으로 묶은 후 각 그룹에서 샘플을 추출하는 함수다. 이 함수는 base::sample( )에 대응하므로 함께 알아보도록 하자.

표 4-20 데이터 샘플링

base::sample : 샘플링을 수행한다.

sample(
  x,              # 샘플을 뽑을 데이터 벡터. 만약 길이 1인 숫자 n이 지정되면 1:n에서 샘플이 선택된다.
  size,           # 샘플의 크기
  replace=FALSE,  # 복원 추출6여부
  # 데이터가 뽑힐 가중치. 예를 들어, x=c(1, 2, 3)에서 2개의 샘플을 뽑되 각 샘플이 뽑힐 확률을
  # 50%, 20%, 30%로 하고자 한다면 size=2, prob=c(5, 2, 3)을 지정한다. 이 인자의 이름은
  # prob이지만 prob에 지정한 값의 합이 1일 필요는 없다.
  prob
)

반환 값은 샘플을 저장한 길이 size인 벡터다.

doBy::sampleBy : 포뮬러에 따라 데이터를 그룹으로 묶은 후 샘플을 추출한다.

doBy::sampleBy(
  formula,              # ~ 우측에 나열한 이름에 따라 데이터가 그룹으로 묶인다.
  frac=0.1,             # 추출할 샘플의 비율이며 기본값은 10%
  replace=FALSE,        # 복원 추출 여부
  data=parent.frame(),  # 데이터를 추출할 데이터 프레임
  systematic=FALSE      # 계통 추출(Systematic Sampling)7을 사용할지 여부
)

반환 값은 데이터 프레임이다.

sample( )은 주어진 데이터에서 임의로 샘플(표본)을 추출하는 목적으로 사용된다. 복원 추출 여부는 replace로 지정하며, 기본값은 비복원 추출(replace=FALSE)이다. 다음은 1에서 10까지의 숫자 중 5개를 샘플링한 결과다. replace=TRUE일 경우 6이 2회 추출된 것을 볼 수 있다.

> sample(1:10, 5)
[1] 10 3 8 2 6
> sample(1:10, 5, replace=TRUE)
[1] 8 1 6 6 10

6 한 번 뽑힌 데이터가 다시 뽑힐 수 있는 경우를 복원 추출, 한 번 뽑힌 데이터는 다시 뽑힐 수 없는 경우를 비복원 추출이라 한다.

7 계통 추출은 첫 샘플을 추출한 뒤 그 샘플로부터 동일한 간격에 있는 데이터들을 샘플로 추출하는 방법을 말한다. 예를 들어, 1 ~ 100 사이의 숫자에서 10개의 샘플을 뽑는 경우를 생각해보자. 먼저 1 ~ 10 사이의 샘플을 하나 추출한다. 이 값이 5라고 하자. 10개의 샘플을 뽑기 위해 동일한 간격 10마다 샘플을 뽑으면 5, 15, 25, 35, …, 95가 샘플로 추출된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.