앞서 이야기했던 표본 추출 이야기를 이어서하겠습니다. 앞에서는 간단한 숫자나 문자에서 표본을 일부 추출하는 방식을 이야기했습니다. 하지만 우리가 표본을 추출할때는 이런 데이터에서 숫자를 추출하는 경우는 매우 드물 것입니다. 실제로는 훨씬 크고 복잡한 데이터에서 표본을 무작위 추출하게 될 것입니다. 지금까지 이용했던 diamonds 데이터를 이용해서 한번 추출해 보겠습니다. 예제는 무작위로 10개의 표본을 비복원 추출하는 것입니다.
library("ggplot2")
sample(diamonds,10,replace=FALSE)
이렇게 하면 잘 될 것 같지만, 실제로는 아래와 같은 데이터가 쭉 나오는 것을 볼 수 있습니다.
(생략)
991 58.0 5.88 E Premium SI1 0.77 3.60 2896 5.94 60.9
992 57.0 6.35 I Very Good I1 1.01 4.02 2896 6.39 63.1
993 57.0 6.45 I Ideal I1 1.01 3.97 2896 6.46 61.5
994 57.0 5.51 D Very Good VVS2 0.60 3.33 2897 5.48 60.6
995 58.0 5.85 E Premium SI1 0.76 3.59 2897 5.91 61.1
996 52.0 5.34 D Ideal VVS2 0.54 3.26 2897 5.30 61.4
997 55.0 5.74 E Ideal SI1 0.72 3.57 2897 5.69 62.5
998 61.0 5.89 F Good VS1 0.72 3.48 2897 5.82 59.4
999 58.0 5.77 D Premium VS2 0.74 3.58 2897 5.81 61.8
1000 59.0 6.61 J Premium SI2 1.12 4.03 2898 6.68 60.6
[ reached getOption("max.print") -- omitted 52940 rows ]
이유는 간단합니다. 5만개가 넘는 관측값이 아니라 변수를 추출했기 때문이죠. 이 경우 선택할 수 있는 방법은 행과 열을 바꾸거나 혹은 sampling 패키지 같은 전문적인 용도의 패키지를 사용하는 것입니다. 사용이 복잡한 패키지 설치보다는 간단하게 할 수 있는 방법을 설명해 보겠습니다.
> diamonds1<-sample 10="" diamonds="" nrow="" span="">-sample>
> diamonds1
[1] 3318 767 20548 17568 50479 19370 19978 23998 53249 38003
sample 명령어에서 1:nrow()를 지정하면 행이 아닌 열을 선택하는 명령이 됩니다. 하지만 이 경우 몇번째 열이 선택되었는지만 표시됩니다. 데이터를 표시하기 위해서는 다른 방법이 필요합니다.
diamonds[diamonds1, ]라는 표시를 통해서 행과 열을 다 표시할 수 있습니다. 이 경우 , 뒤에 반드시 한 칸 정도 공간을 띄어야 합니다.
여기서 다시 조건에 맞춰서 표본을 무작위 추출하는 방식을 생각해 봅니다. 가장 간단한 방법은 앞서 설명했던 subset 명령어를 이용한 방법입니다.
subset을 이용해서 원하는 조건을 표시할 수 있습니다. 예를 들어 cut 이 ideal 이고 색상이 H 인 샘플만 랜덤 추출할 수 있죠.
이렇게 만든 작은 데이터 파일은 여러 용도로 사용할 수 있으며 필요에 따라 합칠수도 있습니다. 여기서는 S1과 S2를 합쳐보겠습니다.
여기서는 rbind를 이용해서 간단히 데이터 파일을 합쳤습니다. 두 데이터가 같은 변수와 순서를 가지고 있기 때문에 합치는데 문제가 없습니다.
댓글
댓글 쓰기