방명록
- [R] binding & array2024년 01월 25일 18시 02분 35초에 업로드 된 글입니다.작성자: Type-유
바인딩
cbind() : Take a sequence of vector, matrix or data-frame arguments and combine by columns, respectively. These are generic functions with methods for other R classes.
vector와 matrix, 그리고 data-frame을 열을 기준으로 바인딩할 수 있는 함수이다.
rbind()는 위와 같은 특성을 띄지만 행을 기준으로 바인딩 시키는 함수이다.
> a <- c(1,2,3,4) > b <- c(2,4,8,16) > cbind(a,b) a b [1,] 1 2 [2,] 2 4 [3,] 3 8 [4,] 4 16 > rbind(a,b) [,1] [,2] [,3] [,4] a 1 2 3 4 b 2 4 8 16위의 설명에서도 알 수 있듯 cbind, rbind 함수는 벡터만을 다루지 않고 행렬과 데이터프레임을 다룰 수도 있다.
아래에서는 위의 예제를 통해 생성된 행렬을 이용하여 행렬에 대한 특성을 이해해보려고 한다.
> x <- cbind(a,b) > y <- rbind(a,b) > x a b [1,] 1 2 [2,] 2 4 [3,] 3 8 [4,] 4 16 > y [,1] [,2] [,3] [,4] a 1 2 3 4 b 2 4 8 16인덱스를 통한 자료 확인& 전치 행렬
# R에서 행렬은 "행렬이름[행,열]"로 정의되며 각 행렬의 번호는 1부터 시작한다. # x의 열은 2까지 이므로 다음 실행은 오류를 발생시킨다. > x[,4] x[, 4]에서 다음과 같은 에러가 발생했습니다:첨자의 허용 범위를 벗어났습니다 > x[4,] a b 4 16 > x[2,2] b 4 # ':'를 활용해 범위를 입력할 수 있다. 아래의 입력은 1,2행의 2열 데이터를 불러온 것이다. > x[1:2,2] [1] 2 4 # 인덱스의 앞에 '-'를 붙이면 해당 인덱스에 해당하는 데이터를 제외하고 불러올 수 있다. > x[-3,] a b [1,] 1 2 [2,] 2 4 [3,] 4 16 # t()는 전치행렬을 생성하는 함수이다. 위의 x와 y는 전치행렬 관계이므로 이를 비교해보자. > t(x)==y [,1] [,2] [,3] [,4] a TRUE TRUE TRUE TRUE b TRUE TRUE TRUE TRUE > t(x) [,1] [,2] [,3] [,4] a 1 2 3 4 b 2 4 8 16음수첨자(negative subscript, '-')는 다른 프로그래밍 언어에서는 보기 힘든 R의 유용한 기능이니 기억해두면 좋겠다.
matrix 할당
# 2행 4열의 행렬을 생성하고, 데이터는 1~8로 할당한다. > mat2by4 <- matrix(1:8, nrow = 2, ncol = 4) # 숫자를 순서대로 할당할 때, 열에 대하여 우선 할당하는 경향이 있다. > mat2by4 [,1] [,2] [,3] [,4] [1,] 1 3 5 7 [2,] 2 4 6 8만약 숫자를 행에 우선으로 할당하고 싶은 경우는 기본설정되어 있는 인자를 바꾸어주면 된다.
# 'matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)' # 여기서 byrow를 변경해주면 된다. > mat2by4byrow <- matrix(1:8, nrow = 2, ncol = 4, byrow = TRUE) > mat2by4byrow [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 5 6 7 83차원 배열
array('data', dim =...) 함수를 통해 3차원 배열을 만들 수 있다.
# 차원을 설정하는 'dim'인자를 통해 행렬의 구조를 설정한다. > arr2by4by3 <- array(1:24, dim = c(2,4,3)) > arr2by4by3 , , 1 [,1] [,2] [,3] [,4] [1,] 1 3 5 7 [2,] 2 4 6 8 , , 2 [,1] [,2] [,3] [,4] [1,] 9 11 13 15 [2,] 10 12 14 16 , , 3 [,1] [,2] [,3] [,4] [1,] 17 19 21 23 [2,] 18 20 22 24다음은 3차원 배열의 데이터를 조회하는 방법이다. 헷갈릴 수 있으니 위의 기본 데이터 구조와 잘 대조하여 이해할 필요가 있다.
> arr2by4by3[1,,] [,1] [,2] [,3] [1,] 1 9 17 [2,] 3 11 19 [3,] 5 13 21 [4,] 7 15 23 > arr2by4by3[1,-4,] [,1] [,2] [,3] [1,] 1 9 17 [2,] 3 11 19 [3,] 5 13 21 # 음수첨자(-)를 통해 여러 데이터를 제거하고 싶은 경우 벡터 형식으로 넘겨주면 된다. > arr2by4by3[1,c(-3,-4),] [,1] [,2] [,3] [1,] 1 9 17 [2,] 3 11 19벡터, 행렬, 배열을 다룸에 있어서 길이나 차원 등의 구조를 파악하는 것은 중요하다. length()와 dim()함수를 통해 이를 확인 할 수 있다.
# length() 해당 배열에 할당된 데이터의 수라고 생각해도 될 것 같다. > length(arr2by4by3) [1] 24 > dim(arr2by4by3[1,2:3,]) [1] 2 3 > arr2by4by3[1,2:3,] [,1] [,2] [,3] [1,] 3 11 19 [2,] 5 13 21'IT > 프로그래밍 언어' 카테고리의 다른 글
[R] error 처리 (1) 2024.01.25 [R] apply() 계열 함수 (1) 2024.01.22 [R] set.seed( )함수, replace = True or Fale (0) 2024.01.22 [R] 조건문 (0) 2024.01.21 [R] 지역 할당과 슈퍼 할당 (1) 2024.01.21 다음글이 없습니다.이전글이 없습니다.댓글