우리는 정제 및 분석과정에서 데이터셋의 일부만 사용하고자 할 때가 있습니다. 이를 부분 선택(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]

'Ⅰ. R 기초' 카테고리의 다른 글
14. 데이터 구조 별 정렬하기 (작성중) (0) | 2020.10.20 |
---|---|
13. 데이터 구조 별 필터링하기 (0) | 2020.10.07 |
11. 데이터 구조 별 인덱싱하기 (0) | 2020.09.29 |
10. 데이터 구조 파악하기 (0) | 2020.09.28 |