데이터 구조(벡터, 행렬, 리스트, 데이터프레임) 특집 - 벡터 첫번째
< 벡터 >
벡터는 모든 원소가 같은 데이터 속성을 갖는 1차원 데이터 구조이다.
행렬은 matrix, 리스트는 list, 데이터프레임은 data.frame으로 변수를 선언할 때 데이터 구조를 컴퓨터에게 알려주어야 하지만, 벡터는 별도로 알려주지 않아도 벡터로 인식한다.
벡터를 생성할 때는 값을 바로 넣어주면 되고, 여러 개의 값을 넣어줄 때는 c( ) 연결함수를 통해 생성할 수 있다.
# 벡터 선언
x <- c(88, 5, 12, 13)
x
< 벡터 인덱싱 >
벡터 안에 값이 여러 개 일때 특정 위치에 있는 값이 무엇인지 확인해야 할 경우에 사용한다. 연산자 [ ]를 이용한다.
다른 프로그래밍 언어는 순서를 셀 때 0부터 세지만 R은 1부터 순서를 매긴다.
# 벡터 인덱싱
x <- c(88, 5, 12, 13)
x[2] # 두번째 값 인덱싱
x[2:4] # 두번째부터 네번째 값 인덱싱
< 벡터 원소 추가 및 삭제 >
벡터의 크기는 처음 생성될 때 정해진다. 따라서 원소를 추가하거나 삭제하려면 벡터를 새로 할당하면 된다.
(같은 변수 이름으로 중복해서 덮어쓰기)
# 벡터 원소 추가 및 삭제
x <- c(88, 5, 12, 13)
x <- c(x[1:3], 168, x[4]) # 위의 x변수에서 3번째와 4번째값 사이에 168이라는 값을 추가
x
x <- c(x[1:3], x[5]) # 추가했던 168 다시 삭제
x
위 예시처럼 벡터 사이에 원소를 추가 하기 위해서는 기존의 벡터를 나누고 새로운 벡터와 함께 하나의 벡터로 묶어서 연결 할 수 있다. 컴퓨터 상에서는 실제로 원소를 추가하는게 아니고 새롭게 만든 벡터를 기존 변수에 덮어쓰기 한 것이다. (삭제도 마찬가지)
※ 가끔 덮어쓰기 하는 이 기능은 R의 빠른 성능을 제한하는 요인으로 작용하기도 한다.
< 벡터 길이 >
벡터의 길이를 파악하는 연산자는 length( ) 를 사용하면 된다.
# 벡터의 길이
y <- c(1:10, 90:100)
y
length(y) # 벡터 y의 길이 확인
위와 같이 생성한 y 벡터의 길이가 21이라는 것을 알 수 있다.
length( )는 길이가 궁금할 때도 사용하지만, 반복문이나 조건문을 사용할 때도 유용하게 쓸 수 있다.
< 벡터 산술연산 >
벡터가 두개 이상일 때 벡터간에도 덧셈과 뺄셈 등 산술연산을 할 수 있다.
벡터 간의 산술연산은 벡터를 구성하고 있는 원소 단위로 매칭해서 진행된다.
연산자는 다음과 같다.
덧셈연산 | + |
뺄셈연산 | - |
곱셈연산 | * |
나눗셈연산(몫) | / |
나눗셈연산(나머지) | %% |
위 연산자에서 나눗셈 연산자는 두가지 이다.
나누고 남은 몫을 구하는 연산자는 / 이고, 나눈 나머지 값을 구하는 연산자는 %% 이다.
예) 7 %% 2 는 7을 2로 나눌 때 3번 나누고 남은 값이 1이므로 1이 출력
# 벡터 산술연산
x <- c(2, 4, 8)
y <- c(2, 2, 2)
x+y
x-y
x*y
x/y
x%%y
< 벡터 재사용 >
길이가 다른 두 벡터를 산술연산한다면, 두 길이를 같게 해주기 위해 길이가 짧은쪽 벡터를 처음부터 다시 재사용해서 긴쪽 벡터에 맞춰준다.
# 벡터 재사용
x <- c(1, 2, 3)
y <- c(1, 2, 3, 4, 5)
x+y
< 벡터 콜론(:)연산 >
콜론(:)연산은 일정 범위의 숫자로 이루어진 벡터를 생성하는 기능을 한다.
주의할점은 콜론(:)연산이 산술연산(+,-,*,/,%%)보다 우선순위가 높다. 수학에서 더하기 빼기보다 곱하기 나누기가 더 우선순위가 높은 것과 같은 개념이다.
# 콜론(:)연산
5:8
5:1
i <- 3 #i에 3대입
1:i-1 # 1:i를 먼저 계산하고, -1 계산
1:(i-1) # i-1을 먼저 계산하고, 콜론(:) 연산 수행
'R프로그래밍' 카테고리의 다른 글
[R프로그래밍] 벡터 구조 Ⅲ(필터링, subset, which, ifelse 삼항연산, names) (0) | 2020.04.16 |
---|---|
[R프로그래밍] 벡터 구조 Ⅱ(seq, rep, all, any, NA, NULL) (0) | 2020.04.14 |
[R프로그래밍] 샘플링(sampling)과 기초통계, 상관계수 (0) | 2020.03.16 |
[R프로그래밍] 팩터(Factor) 변수 (0) | 2020.03.13 |
[R프로그래밍] 워킹디렉토리 설정, 데이터 불러오기(TXT, CSV file) (0) | 2020.03.12 |