5.14 벡터의 서브세팅

벡터를 하위 집합으로 만들 수 있는 방법에는 다음과 같은 네 가지 유형이 있습니다.

정수만 포함하는 숫자형 벡터입니다. 정수는 모두 양수, 모두 음수 또는 0이어야 합니다. 양의 정수로 부분 집합화하면 요소가 해당 위치에 유지됩니다.

x1 <- c("one", "two", "three", "four", "five")

# 정수형 벡터를 이용한 서브세팅
y1 <- x1[c(3, 2, 5)]; y1              # y1벡터는 x1의 3, 2, 5 번쨰의 순으로 요소들을 서브세팅합니다.
## [1] "three" "two"   "five"
y2 <- x1[c(1, 1, 5, 5, 5, 2)]; y2     # y2벡터는 x1의 1번째 요소를 2번, 5번째 요소를 3번, 그리고 2번쨰 요소를 1번 서브세팅합니다.
## [1] "one"  "one"  "five" "five" "five" "two"
y3 <- x1[c(-1, -3, -5)]; y3           # 음수의 사용은 그 요소를 제거합니다. 즉, y3는 x1의 1번쨰, 3번째, 5번째 요소를 제외한 서브세팅입니다.
## [1] "two"  "four"
y4 <- x1[c(1, -1)]; y4                # 그러나 음수와 양수를 동시에 사용하면 Error가 발생합니다.
## Error in x1[c(1, -1)]: only 0's may be mixed with negative subscripts
## Error in eval(expr, envir, enclos): 객체 'y4'를 찾을 수 없습니다
# 결측치를 제거하는 서브세팅
x2 <- c(10, 3, NA, 5, 8, 1, NA)       # NA는 결측치입니다. 
y5 <- x2[!is.na(x2)]; y5              # y5는 x2의 요소 중 NA가 아닌 것(!is.na(x2))만 서브세팅합니다.
## [1] 10  3  5  8  1
# 논리형 벡터를 이용한 서브세팅
y6 <- x2[x2 %% 2 == 0]; y6            # y6는 x2의 요소 중 2로 나눈 나머지가 0인 즉 짝수인 요소만 서브세팅합니다.
## [1] 10 NA  8 NA
                                      # 그런데 NA도 출력됨을 주목하기 바랍니다.
# 벡터의 이름을 이용한 서브세팅
x3 <- c(abc = 1, def = 2, xyz = 5)    # x3는 이름이 붙여진 벡터입니다.
y7 <- x3[c("xyz", "def")]; y7         # y7는 x3의 "xyz", "def"요소를 서브세팅합니다.
## xyz def 
##   5   2