티스토리 뷰
[R] 꼭 얄아야 할 R 기본 개념 part.2 (행렬곱, t, rbind, cbind, seq, rep)
Gom Guard 2018. 6. 20. 19:37base R content
본격적인 R 프로그래밍을 시작하기 전에 숙지해놓아야 할 것들만 정리한 페이지 입니다. 이 페이지는 기본적으로 R studio base r cheet sheet 를 기반으로 구성하였습니다.
이번 글에서는 R에서 사용하는 데이터 형식들 (vector, matrix, array, list, data frame) 과 R 기본 프로그래밍 에 대해 살펴보겠습니다.
데이터 구조
가장 기초가 되는 value 입니다. R 에서 사용하는 value 는 character, numeric, integer, logical, complex 로 총 5가지로 분류할 수 있습니다.
value 가 여러개 모여 1차원 데이터 구조를 형성하고 이를 vector 라고 부릅니다. vector 는 모든 종류의 value 를 포함할 수 있지만 하나의 vector 는 한 종류의 value 들만 포함할 수 있습니다.
vector 가 여러개 모여 matrix 를 구성합니다. matrix 는 2차원 데이터 구조 입니다. 행과 열로 이루어져 있으며 vector 처럼 하나의 matrix 는 한 종류의 value 들만 포함할 수 있습니다.
2 차원 데이터 구조인 matrix 를 여러개 모아 array 를 만들 수 있습니다. array 는 3차원 이상의 데이터 구조를 만들 수 있으며 vector 나 matrix 처럼 한 종류의 value 들만 포함할 수 있습니다.
vector 나 matrix, array 는 한 종류의 value 들만 포함할 수 있었지만 list 는 그렇지 않습니다.
list 는 여러 형식의 value 들을 포함할 수 있으며 다 차원 데이터 구조를 구성할 수 있습니다.
또한 각 열의 길이가 다를 수 있다는 점이 특이한 부분입니다.
data frame 을 일반적으로 가장 많이 쓰는 table 과 같습니다. 다 차원 데이터 구조를 구축할 수 있으며 list 처럼 여러 형식의 데이터를 포함할 수 있습니다.
list 와 다른 점은 list 는 각 열의 길이가 달라도 괜찮지만 data frame 은 각 열의 길이가 같아야 한다는 점 입니다.
데이터 구조 - vector
vector 를 만드는 방법은 여러가지가 있습니다.
가장 많이 일반적으로 사용되는 것은 combine 함수로 묶는 방법입니다. c( elements ) 로 사용할 수 있습니다.
숫자일 경우는 1:3 에서 처럼 : 를 사용해서 연속된 시퀀스를 만드는 것도 가능하며 직접 seq() 메소드를 사용할 수 도 있습니다.
repeat 기능인 rep() 함수를 사용해서 반복적인 vector 를 만드는 것도 가능합니다.
vector 전용 함수들이 있습니다. sort(), rev(), table(), unique() 함수 입니다.
sort() 는 vector 를 정렬하는 기능을 갖고 있습니다.
rev() 는 vector 를 거꾸로 뒤집는 기능입니다.
table() 은 요약해주는 기능입니다. input 이 123123 일 경우에 table() 메소드의 output 이 1 2 3 / 2 2 2 로 나오는 것을 확인할 수 있는데, 이는 1 과 2 와 3 이 각각 2개 씩 존재한다는 것을 의미합니다.
unique() 는 중복을 제거해주는 함수라고 표현할 수 있습니다.
vector 를 조회하는 방법으로는 크게 2 가지가 있습니다. 위치를 기반으로 하는 조회방법과 값을 기반으로 하는 조회방법이 있습니다.
위치를 기반으로 조회하는 방법은 vector_name[ index ] 입니다. index 가 4 면 4 번째 값을 조회하는 것이고 -4 이면 4 번째 값을 제외하고 조회하는 것 입니다. 2:4 처럼 시퀀스 값의 경우 2,3,4 를 조회하겠다는 의미 이며 -(2:4) 이면 2,3,4 를 제외한 값을 조회하겠다는 의미 입니다. c(1,5) 가 index 일 경우에는 1 과 5 번째를 조회하겠다는 의미 입니다.
값을 기반으로 하는 조회방법은 index 란에 조건을 넣어주어야 합니다. x == 4 를 실행해보면 F, F, F, T, F 를 반환합니다. 따라서 x[ x==4 ] 는 x[c( FALSE, FALSE, FALSE, TRUE, FALSE)] 과 유사합니다. 이 경우 TRUE 값인 위치인 4 만 반환합니다. x[ x<3 ] 또한 마찬가지 입니다. TRUE 값인 1 과 2 만 반환합니다.
어떤 값이 어떤 시퀀스 안에 포함되어 있는지 확인하고 싶을 때 사용하는 연산자는 %in% 입니다. x %in% c( 2, 3, 4 ) 는 x 가 2, 3, 4 중 하나이면 TRUE 를 반환하는 것입니다. 따라서 TRUE 값을 반환하는 2 와 3, 4 를 출력하는 것을 알 수 있습니다.
데이터 구조 - matrix
matrix 를 만드는 방법은 matrix() 메소드를 사용하는 것 입니다. 대표적인 parameter 로는 data 와 열의 수와 행의 수 가 있습니다.
주의할 점은 기본적으로 데이터를 열 부터 채운다는 점입니다. 따라서 1 열이 1 , 2 , 3 입니다만 만약 행부터 채우고 싶다면 byrow 파라메터 값을 TRUE 로 변경해주시면 됩니다. matrix(1:9, 3, 3, byrow = TRUE) 처럼 명령하면 1열의 값은 1, 4, 7 로 채워질 것입니다.
처음 matrix 를 만들 때 byrow 파라메터를 이용해서 채워 넣는 방법도 있지만 matrix 로 여러 연산을 진행하다가 transpose 해야할 경우가 있습니다. 이럴 때는 t( matrix_name ) 메소드를 사용할 수 있습니다.
행렬곱은 많이 사용합니다만 차후 머신러닝 관련 코드를 구성할 경우에 정말 많이 사용해야 합니다. 이때 단순히 * 연산자를 사용하면 원하는 결과를 얻지 못합니다.
R 에서 matrix 간 연산에서 사용하는 * 연산자는 요소곱을 의미합니다. 하지만 일반적으로 행렬간 곱을 할 때는 행렬곱을 사용하죠.
R 에서 행렬곱을 위해선 %*% 연산자를 사용해야합니다.
다른 프로그래밍 언어를 다룬 적이 있다면 매우 익숙한 조회방법일 겁니다. 기본적으로는 vector 의 조회방식과 같습니다. [ row_index, col_index ] 라고 생각하시면 됩니다.
데이터 구조 - array
array 를 만들기 위해선 array 함수를 사용합니다. array( data, dimensions ) 가 기본구조이며 dimensions 는 벡터값으로 구성해주면 됩니다.
array 도 마찬가지로 열부터 값이 채워집니다. 하지만 matrix 와 다르게 byrow 파라메터는 없습니다.
조회방법은 기본적으로 matrix 와 같습니다. [ 행번호, 열번호, 추가 차원 번호 ] 로 구성됩니다. 따라서 만약에 위의 array 에서 19 를 조회하고 싶다면 a[ 1, 1, 3 ] 으로 조회할 수 있습니다. 만약 3차원보다 더 큰 차원이 된다면 추가 차원에 대한 index 가 뒤에 붙는 형식입니다. 직접 실험해보시면 더 빠르게 이해할 수 있으실 겁니다.
데이터 구조 - list
여러 벡터들을 list() 함수로 묶어주면 새로운 list 를 만들 수 있습니다. 다른 종류의 데이터를 포함할 수 있고 길이가 같지 않아도 되는 것이 list 의 특징입니다.
list 의 조회방법은 여러가지가 있습니다. 하지만 matrix 와는 조금 다른 부분이 있으니 자세히 봐볼까요.
열 전체를 조회하는 방법이 총 3가지 정도 있습니다.
첫번째는 list$colname 입니다. 예제에선 a 열을 조회하기 위해 l$a 라고 지정한 것을 확인할 수 있습니다. $ 는 차후 데이터 프레임에서도 많이 사용하는 방법입니다.
두번쨰는 list['colname'] 입니다. index 란 안에 colname 을 넣어 조회하는 방법입니다. 개인적으로는 첫번째 방법을 더 선호합니다.
세번째는 열의 순서를 통한 조회입니다. l [ [ col_index ] ] 입니다. b 열 전체를 조회하기 위해 l [ [2] ] 처럼 조회할 수 있습니다.
특정 값들을 조회하고 싶을 때는 열과 행을 각각 지정해줘야 합니다. l [ [ con_index ] ] [ row_index ] 처럼 조회할 수 있습니다.
데이터 구조 - data frame
data frame 을 만들 때는 data 들을 data.frame 함수로 엮어주면 됩니다. data 에는 vector 도 가능하고 data.frame 도 가능합니다. 중요한 것은 모든 열의 길이가 모두 같아야 한다는 점 입니다.
data frame 은 matrix 처럼 조회할 수도, list 처럼 조회할 수도 있습니다. 개인적으로는 matrix 처럼 조회하면서 열 전체를 선택해야하는 경우에는 list 처럼 $ 를 사용해서 조회합니다.
data frame 에서 자주 사용하는 함수들을 살펴보겠습니다.
View() 는 data frame 전체를 새로운 창에서 보여주는 함수입니다. View() 의 가장 앞자리가 대문자라는 것을 주의하세요.
head() 는 data frame 의 처음 6 줄을 콘솔 창에 출력해주는 함수입니다. 기본적인 구조를 보기 위해 자주 사용하는 함수입니다.
nrow(), ncol() 은 각각 열의 수와 행의 수를 출력하는 함수입니다. 이 둘을 동시에 출력하기 위해서는 dim() 함수를 사용합니다. dim() 함수는 행의 수 부터 출력합니다. 마치 값을 조회할 때 처럼요.
여러개의 data frame 을 결합할 때 사용하는 함수입니다. cbind 는 column 을 합치는 함수 입니다. sql 의 join 과 비슷합니다.
마찬가지로 rbind 는 row 를 합치는 함수 입니다. sql 의 union 과 비슷합니다.
기본 프로그래밍 문법
기본 프로그래밍 문법 부분은 프로그래밍 언어를 접해본 적이 있으신 분을 대상으로 진행했습니다. 반복문이나 조건문의 개념은 어떤 프로그래밍 언어에서든지 관계없이 동일하기 때문에 R 에서는 어떻게 반복문이나 조건문을 작성하는지만 살펴보겠습니다.
2018/06/20 - [R/R Language] - [R] 꼭 얄아야 할 R 기본 개념 part.1 (help, install.package, getwd, setwd)
2018/06/12 - [R/R Language] - [R 기본] readr 패키지 사용법 (read_csv, write_csv)
2018/06/13 - [R/R Language] - [R 기본] tidyr 패키지 사용법 (split, reshape, combine)
2018/06/16 - [R/R Language] - [R 기본] stringr 패키지 사용법 (detect, mutate, manage string)
부족한 블로그에 방문해 주셔서 감사합니다.
잘못된 부분이나 질문이 있으시면
댓글로 말씀해주세요.
금방 확인하고 피드백 드리겠습니다.
좋은 하루 되세요. ^^
'R > R Language' 카테고리의 다른 글
FormatC in r : 숫자 콤마로 구분하기 (0) | 2018.11.27 |
---|---|
tibble 중 숫자에 콤마 넣어서 표시하는 방법 (0) | 2018.11.19 |
[R] 꼭 알아야 할 R 기본 개념 part.1 (help, install.package, getwd, setwd) (6) | 2018.06.20 |
[R] na 값 0 으로 대체하기 (3) | 2018.06.19 |
[R] Error in match.names(clabs, names(xi)) : 오류 해결법 (3) | 2018.06.19 |
- Total
- Today
- Yesterday
- 캠핑장추천
- 가족캠핑
- 서울근교캠핑
- 자연힐링
- 글램핑
- 반려견캠핑
- 머신러닝
- Koreancuisine
- 영월여행
- 카카오
- sql
- 가족여행
- bukhansannationalpark
- 커플여행
- 영월캠핑
- 계곡캠핑
- 캠핑초보
- 여름휴가추천
- 알고리즘
- python
- 여름휴가
- 강원도여행
- 강원도캠핑
- 파이썬
- Oracle
- 가평캠핑
- 가평여행
- SeoulTravel
- 여름캠핑
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |