replicate 함수를 알아보자.
replicate() 함수는 반복문의 내용(expr)을 두 번째 인자에 부여하고,
첫 번째 인자에 반복횟수를 넣어줌으로써 반복 실행된 코드의 결과를 벡터형태로 반환시켜주는 편리한 함수이다.
replicate(반복횟수, 반복시킬 함수)
> replicate(6, c(1:10))
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 1 1 1 1 1
[2,] 2 2 2 2 2 2
[3,] 3 3 3 3 3 3
[4,] 4 4 4 4 4 4
[5,] 5 5 5 5 5 5
[6,] 6 6 6 6 6 6
[7,] 7 7 7 7 7 7
[8,] 8 8 8 8 8 8
[9,] 9 9 9 9 9 9
[10,] 10 10 10 10 10 10
위의 상태를 보면 알 수 있듯이 6번 반복하는데 벡터 1~10을 출력해준다.
이때 class를 해보면 matrix임을 알 수 있다.
sample을 알아보자.
> sample(1:10)
[1] 10 7 6 3 8 1 9 4 5 2
한번 뽑았던 것은 다시 뽑지 않는 방식으로 1~10의 수중 하나를 뽑아준다.
:: 비복원 추출
> sample(1:10, rep = T)
[1] 1 6 5 9 1 9 6 2 4 7
한번 뽑았던 것도 또 뽑을 수 있도록 해주는 방식으로 1~10의 수중 하나를 뽑아준다.
:: 복원 추출
> sample(1:10, 3, rep = T)
[1] 9 8 5
1~10의 수 중 3개를 복원 추출로 해준다.
이제 아래 replicate와 sample을 조합해보자.
> replicate(6, sample(c(1:10)))
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 5 10 3 10 9 2
[2,] 8 3 8 2 1 10
[3,] 7 8 2 4 4 3
[4,] 1 4 6 8 7 7
[5,] 2 6 10 6 8 6
[6,] 4 9 9 1 6 9
[7,] 6 2 4 5 10 8
[8,] 3 7 1 3 2 1
[9,] 10 5 5 7 5 4
[10,] 9 1 7 9 3 5
6번 반복할건데 1~10의 수를 비복원 추출해달라는 의미이다.
> replicate(6, sample(1:5, 7, rep = T))
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 1 2 5 3
[2,] 5 2 3 4 1 5
[3,] 5 1 1 2 1 4
[4,] 2 2 5 4 2 4
[5,] 1 2 3 1 4 1
[6,] 5 5 4 4 2 4
[7,] 4 2 4 1 1 2
6번 반복할건데 1~5의 수중 7개를 비복원 추출 해달라는 의미이다.
> a <- data.frame(replicate(6, sample(1:5, 7, rep = T)))
> a
X1 X2 X3 X4 X5 X6
1 1 4 1 4 5 3
2 3 3 1 4 5 3
3 1 4 3 2 3 1
4 2 5 5 3 2 5
5 3 2 5 3 1 5
6 2 2 4 1 4 4
7 4 2 2 2 5 1
> names(a) <- letters[1:6]
> a
a b c d e f
1 1 4 1 4 5 3
2 3 3 1 4 5 3
3 1 4 3 2 3 1
4 2 5 5 3 2 5
5 3 2 5 3 1 5
6 2 2 4 1 4 4
7 4 2 2 2 5 1
위의 내용을 데이터 프레임으로 바꾸기 위해 data.frame(~~)를 해주고,
이름 설정을 위해 edit 혹은 names를 해준다.
데이터 프레임 응용해보기
> df <- data.frame(replicate(6, sample(c(1:10, -99), 7, rep = TRUE)))
> df
X1 X2 X3 X4 X5 X6
1 4 2 10 4 7 6
2 4 8 2 2 9 3
3 4 2 7 9 10 7
4 10 -99 2 2 3 -99
5 4 7 7 9 4 3
6 5 4 1 6 9 10
7 5 9 4 5 1 2
> names(df) <- letters[1:6]
> df
a b c d e f
1 4 2 10 4 7 6
2 4 8 2 2 9 3
3 4 2 7 9 10 7
4 10 -99 2 2 3 -99
5 4 7 7 9 4 3
6 5 4 1 6 9 10
7 5 9 4 5 1 2
> df$b[df$b == -99] <- NA
> df
a b c d e f
1 4 2 10 4 7 6
2 4 8 2 2 9 3
3 4 2 7 9 10 7
4 10 NA 2 2 3 -99
5 4 7 7 9 4 3
6 5 4 1 6 9 10
7 5 9 4 5 1 2
df에 6번 반복하되 1~10 수 혹은 -99중 7개를 복원 추출하여 생성해준다.
그리고 그를 data.frame으로 만들어주고 이름을 names로 넣어준다.
마지막에 df$b[df$b == -99] <- NA라는 의미는 df의 b이름에 해당하는 열에 -99가 있다면 NA로 변경하라는 의미이다.
'Basic > R' 카테고리의 다른 글
의사 결정 트리(Decision Tree), 프루닝(Pruning) (0) | 2018.06.20 |
---|---|
R언어 의사 결정 트리 및 다양한 개념 (0) | 2018.06.19 |
R언어 예제를 통한 몇가지 정리 (0) | 2018.05.25 |
R언어를 이용한 평균, 분산, 표준편차 (0) | 2018.05.14 |
R언어 조건문, 반복문, 함수 (0) | 2018.05.13 |