벡터 서브세팅(subsetting)은 벡터에서 원하는 데이터만을 추출하는 방법을 말한다. 주로[] 연산자를 활용하는데, 이런 원리는 벡터를 확장한 매트릭스, 리스트, 데이터 프레임 등으로 확장할 수 있다. 뒤에서 이들 데이터 구조를 배우고 나서 이것을 대상으로 한 서브 세팅을 설명하겠다.
다음과 같은 정수형(integer) 벡터 x가 있다.
> x <- 11:20
> typeof(x)
[1] "integer"
> x
[1] 11 12 13 14 15 16 17 18 19 20
서브 세팅을 할 때 []에 다음과 같은 방법으로 표현식을 넣는다.
> x[3]
[1] 13
> x[c(1,3,5)]
[1] 11 13 15
> x[c(1,3,3,5)] // 인덱스를 중복하여 넣으면 중복하여 값 추출.
[1] 11 13 13 15
> x[c(5,3,1)] // 정해준 순서에 따라 추출
[1] 15 13 11
1. 자연수로 구성된 숫자형 벡터 : 각 숫자는 요소의 인덱스(위치)를 의미한다. 해당 위치의 값을 추출한다.
> x[-5]
[1] 11 12 13 14 16 17 18 19 20
> x[c(-1,-2,-3)]
[1] 14 15 16 17 18 19 20
2. 음수로 구성된 숫자형 벡터 : 숫자는 요소의 인덱스(위치)를 의미하며, 의미는 이 값을 '제외' 한다는 의미이다.
따라서 x[c(-1,-2,-3)]을 하였을 때도 x의 1,2,3 번 값들이 제외되어서 출력되지 않았다.
> x[c(TRUE,TRUE,FALSE,FALSE)]
[1] 11 12 15 16 19 20
3.논리형 벡터 : 이 벡터의 TRUE 값을 가지는 요소의 위치에 해당하는 값을 추출한다. TRUE,TRUE,FALSE,FALSE여서
11,12,(13),(14),15,16,(17),(18),19,20 이 출력된다. ← () 안에 있는 숫자는 FALSE여서 출력되지 않는 부분
> x[x<13]
[1] 11 12
> x < 13
[1] TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x[x<13]은 조건식을 넣어 주어서 13보다 작은 x의 값들을 출력하는 방식이다.
밑의 방법은 13보다 작은 x 배열의 값들을 논리 값 형태로 나타내주는 방식이다.
11,12는 13보다 작으니까 True로 출력이 되고, 나머지는 13과 같거나 크니까 False 로 출력이 된다.
> letters
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r"
[19] "s" "t" "u" "v" "w" "x" "y" "z"
> LETTERS
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R"
[19] "S" "T" "U" "V" "W" "X" "Y" "Z"
> y <- 1:10 // y라는 10개의 데이터를 가진 배열을 만들어 준다.
> y
[1] 1 2 3 4 5 6 7 8 9 10 //y가 가진 값은 10개이다.
> names(y) <- letters[1:length(y)]
> y
a b c d e f g h i j
1 2 3 4 5 6 7 8 9 10
여기서 names() 함수는 벡터 y의 길이 만큼을 추출하여 이름을 부여한다.
> y[c("a","b","c")]
a b c
1 2 3
이름을 부여하였으니 이것을 사용하여 값을 추출 할 수 있다. 이름을 []안에 넣어서 사용한다.
벡터 이름 [c(인덱스 이름, 인덱스 이름, 인덱스 이름)]
> y
a b c d e f g h i j
1 2 3 4 5 6 7 8 9 10
> y[5] <- 55
> y
a b c d e f g h i j
1 2 3 4 55 6 7 8 9 10
이런 표현식들을 할당문의 좌변(왼쪽)에 넣어서 값을 수정하거나 삭제하는 등의 일을 할 수 있는데, 이것을 교체(replacement) 라고 한다.
> y[c(4,2)] <- c(22,44)
> y
a b c d e f g h i j
1 44 3 22 55 6 7 8 9 10
y 5,4,2 인덱스 값을 55,22,44 로 변경하였다. ↑
> y[-c(2,4,5)] <- 100:106 //y의 2,4,5 요소 값들을 제외한 곳에 새로운 값 부여.
> y
a b c d e f g h i j
100 44 101 22 55 102 103 104 105 106
> y[y < 100] <- c(1,2,3) //y벡터에서 100보다 작은 값들을 1,2,3으로 변경.
> y
a b c d e f g h i j
100 1 101 2 3 102 103 104 105 106
> y
a b c d e f g h i j
100 NA 101 NA NA 102 103 104 105 106
> which(y>100) //100보다 큰 값들의 인덱스를 반환하는 함수 which()
c f g h i j
3 6 7 8 9 10
> y[which(y>100)] <- NA // 100보다 큰 값들의 요소들의 값을 NA로 변경
> y
a b c d e f g h i j
100 NA NA NA NA NA NA NA NA NA
y[y>100]라는 표현식에 which()라는 개념이 들어가 있는 것을 기억하여야 한다.
'전공 > R프로그래밍' 카테고리의 다른 글
R프로그래밍 8. 리스트 (0) | 2019.06.28 |
---|---|
R프로그래밍 7. 규칙성을 가진 벡터 만들기 (0) | 2019.06.26 |
R 프로그래밍 5. R의 패키지 시스템 (0) | 2019.06.14 |
R 프로그래밍 4. 작업이 이루어지는 공간에 대한 개념. (0) | 2019.06.10 |
R프로그래밍 3. 값,표현식,문장 (0) | 2019.06.03 |