우리는 정제 및 분석과정에서 데이터셋의 일부만 사용하고자 할 때가 있습니다. 이를 부분 선택(subsetting)이라고 정의하는데 부분 선택하는 방법은 크게 인덱싱, 슬라이싱, 필터링으로 구분됩니다. 슬라이싱(slicing)의 경우 인덱스와 : 키워드를 이용하여 덩어리채로 부분 선택하는 방법을 의미합니다. 슬라이싱은 인덱싱과 마찬가지로 [], [[]], $ 키워드를 통해 처리할 수 있습니다. 

 

12.1. 벡터 슬라이싱

더보기

(1) 벡터 슬라이싱, [{idx_start}:{idx_end}]

벡터 슬라이싱은 원소의 첫 인덱스와 끝 인덱스를 정의하여 사용할 수 있습니다. 문법 구조는 다음과 같습니다.

vector_name[idx_start:idx_end]

 

(2) 예시

1부터 5까지 정수를 가지는 vector_01 객체를 생성하고, 1번째부터 3번째 원소를 부분 선택하면 다음과 같습니다.

vector_01 <- c(1, 2, 3, 4, 5)
vector_01
vector_01[1:3]

 

12.2. 행렬 슬라이싱

더보기

(1) 행렬 슬라이싱, [{row_idx_start}:{row_idx_end}, {col_idx_start}:{col_idx_end}]

행렬 슬라이싱은 ,을 통해 행열 축을 구분합니다. 문법 구조는 다음과 같습니다.

matrix_name[row_idx_start:row_idx_end, col_idx_start:col_idx_end]

 

(2) 예시

3×3 행렬로 구성된 matrix_01 객체를 정의하고 1:3 행과 2:3 열 원소를 부분 선택하면 다음과 같습니다.

matrix_01 <- matrix(data=c(1, 2, 3, 4, 5, 6, 7, 8, 9),
                    nrow=3,
                    byrow=TRUE)
matrix_01
matrix_01[1:3, 2:3]

 

12.3. 배열 슬라이싱

더보기

(1) 배열 슬라이싱, [{dim1_idx_start}:{dim1_idx_end}, {dim2_idx_start}:{dim2_idx_end}, ⋅⋅⋅]

배열 슬라이싱은 n개의 축을 ,로 구분하며 :을 통해 부분선택할 수 있습니다. 문법 구조는 다음과 같습니다.

array_name[dim1_idx_start:dim1_idx_end, dim2_idx_start:dim2_idx_end, ⋅⋅⋅]

 

(2) 예시

2개 층과 3×3 행렬로 구성된 array_01 객체에서 1:3행 1:2열 1:2층 원소를 부분 선택하면 다음과 같습니다.

array_01 <- array(
  data=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18), 
  dim=c(3, 3, 2)
)
array_01
array_01[1:3, 2:3, 1:2]

 

12.4. 데이터프레임 슬라이싱

더보기

(5) 데이터프레임 슬라이싱, [{row_idx_start}:{row_idx_end}, {col_idx_start}:{col_idx_end}]

데이터프레임 슬라이싱은 행렬의 방식과 동일합니다. 문법 구조는 다음과 같습니다.

dataframe_name[row_idx_start:row_idx_end, col_idx_start:col_idx_end]

 

(2) 예시

이전 포스트인 <10. 데이터 구조 파악하기>를 참고해 student_df 객체을 생성하고, 3:4행과 1:3열을 부분 선택하면 다음과 같습니다. 

student_df <- data.frame(
  name      = c("PSH", "CGE", "CSH", "CMJ", "CJH"),
  gender    = factor(c("m", "f", "m", "f", "m")),
  korean    = c(35, 92.5, 70,85, 60),
  math      = c(65L, 80L, 88L, 67L, 28L),
  test_pass = c(FALSE, TRUE, TRUE, TRUE, FALSE)
)
student_df
student_df[3:4, 1:3]

 

12.5. 리스트 슬라이싱

더보기

(1) 리스트 슬라이싱, [{object_idx_start}:{object_idx_end}]

리스트 슬라이싱은 :을 통해 슬라이싱을 시행할 수 있습니다. 문법 구조는 다음과 같습니다.

list_name[object_idx_start:object_idx_end]

 

(2) 예시

해당 포스트에서 정의된 vector_01, matrix_01, array_01, student_df 객체를 저장하는 list_01 객체를 정의하고 1, 2번 째 객체(vector_01, matrix_01)를 슬라이싱하고자 한다면 다음과 같습니다.

list_01 <- list(
  vector_01  = vector_01,
  matrix_01  = matrix_01,
  array_01   = array_01,
  student_df = student_df
)
list_01
list_01[1:2]