해당 포스트에서는 R에서 랜덤 데이터 샘플링(추출)방법에 대해 설명합니다.
1. INTRO
R에서 랜덤 데이터 추출이 필요한 경우, 내장 함수인 sample()
과 dplyr 패키지의 sample_n()
, sample_frac()
함수를 사용할 수 있습니다. 아래에서 각 함수의 설명과 사용법을 설명하니 상황에 따라 필요한 함수를 사용하시면 됩니다.
참고
아래 예시에서 설명하는 함수들은 무작위 추출되기에 출력 결과가 다를 수 있는 점 참고 부탁드립니다.
2. sample()
sample()
은 R에서 제공되는 내장 함수로 별도의 설치가 필요하지 않습니다. sample()
함수는 난수를 추출해주는 함수로 입력 인자값 차이에 따라 각각 다른 결과값을 리턴합니다. 아래 3가지 예시를 준비하였으니 보시고 사용법을 참고하시면 좋겠습니다.
1) n개의 난수 생성
sample(n)
의 형태로 사용하는 경우, 1:n
까지의 수를 랜덤하게 비복원 추출하여 결과를 리턴합니다. 아래 결과를 보시면 1부터 10까지의 수가 뒤섞여 추출된 것을 볼 수 있습니다.
참고
랜덤 추출이기에 출력 결과가 저와 같지 않을 수 있습니다.
sample(10)
[1] 9 5 2 10 1 4 3 8 6 7
2) n개의 난수에서 k개 추출
sample(n, k)
의 형태로 사용하는 경우, 1:n
까지의 수에서 k
개의 숫자를 랜덤 비복원 추출합니다. 아래 결과를 보시면 1부터 100까지의 수에서 10개의 수가 랜덤 추출된 것을 볼 수 있습니다.
sample(100, 10)
[1] 83 51 1 50 78 75 40 11 45 82
3) mtcars 데이터에서 랜덤 추출하기
R 내장 데이터셋 중 하나인 mtcars를 이용하여 랜덤하게 데이터를 추출해 보겠습니다.
아래 코드는 위에서 설명한 sample(n,k)
방식을 이용하여 n
값 대신에 mtcars 데이터셋 행의 수를 입력하였습니다. 즉, 1부터 mtcars 행의 수까지의 숫자 중에서 10개를 랜덤 추출하여 출력해주는 코드라고 생각하시면 됩니다.
mtcars[sample(nrow(mtcars), 10),]
mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
3. sample_n(), sample_frac()
데이터에서 임의로 샘플 데이터를 추출할 때는 dplyr 패키지의 sample_n()
함수와 sample_frac()
함수를 사용합니다.sample_n()
함수는 전체 데이터에서 샘플 데이터를 개수 기준으로 추출해주며, sample_frac()
함수는 전체 데이터에서 샘플 데이터를 비율 기준으로 추출합니다.
아래에서는 두 함수의 사용 예시를 설명하겠습니다.
1) 샘플 데이터 n개 추출하기
sample_n(n)
함수는 n
개의 샘플 데이터를 추출하는데 사용됩니다. 아래 예시는 mtcars 데이터셋에서 10개의 샘플 데이터를 추출합니다.
library(dplyr)
sample_n(mtcars, 10)
mpg cyl disp hp drat wt qsec vs am gear carb Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
2) 샘플 데이터 p% 추출하기
sample_frac(p)
함수는 전체 데이터에서 p
만큼의 샘플 데이터를 추출합니다. p
는 0부터 1사이의 값을 가지며, 10%의 데이터를 추출하고자 한다면 0.1을 입력해주면 됩니다. 아래 예시는 mtcars 데이터셋에서 50%의 샘플 데이터를 추출합니다.
library(dplyr)
sample_frac(mtcars, 0.5)
mpg cyl disp hp drat wt qsec vs am gear carb Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
추출된 데이터 개수를 비교해 보면 전체 32개의 데이터 중에 16개의 데이터가 추출된 것을 볼 수 있습니다.
nrow(mtcars);nrow(sample_frac(mtcars, 0.5));
[1] 32 [1] 16
4. 관련 링크
[1] [R] R에서 반응 변수 비율에 맞춰 데이터셋 분할하기 (15회 ADP 실기 기출)
[2] [R] 연산자(Operator) 종류 및 사용법 - 초급편