워라밸 중독자

[R] 1차원 데이터 구조 - 벡터의 연산 (산술연산, 논리연산, 함수) 본문

코딩, 딱 지금이 시작할때! (코딱지)

[R] 1차원 데이터 구조 - 벡터의 연산 (산술연산, 논리연산, 함수)

Ufungi 2023. 1. 5. 22:52

 

 

[R] 벡터(vector) 정의 및 생성

벡터(vector)란? 동일한 자료형(정수, 실수, 문자, 논리)의 값이 연속적으로 나열된 자료구조이다. 엑셀에서 '한 행'에 해당하며 일차원 데이터를 저장한다. 벡터 만들기 1. c 함수 concatenate의 첫 글

ufungi.tistory.com

벡터의 산술연산

벡터와 스칼라 사이에는 덧셈, 뺄셈, 곱셉, 나눗셈 등 산술연산이 가능하며, 벡터의 각 원소마다 스칼라 값이 연산된다.

# 벡터와 스칼라의 산술연산

> x <- c(1,2,3,4,5)
> x+3
[1] 4 5 6 7 8
> x-5
[1] -4 -3 -2 -1  0
> x*2
[1]  2  4  6  8 10
> x/2
[1] 0.5 1.0 1.5 2.0 2.5

벡터간 연산을 할 때는 두가지를 기억하자.

  1. 대응하는 원소끼리 연산된다.
  2. 따라서 두 벡터의 길이가 같아야한다.

연산하려는 두 벡터의 길이가 다를 경우 계산은 되지만 경고문이 뜬다.

# 벡터와 벡터의 산술연산

> x1 <- c(1,2,3)
> x2 <- c(-1,-2,-3,-4)
> x1 + x2
[1]  0  0  0 -3
Warning message:
In x1 + x2 :
  longer object length is not a multiple of shorter object length

따라서 벡터 간 연산을 할 때는 두 벡터의 길이가 같아야한다.

> x1 <- c(1,2,3)
> x2 <- c(-1,-2,-3)
> x1 + x2
[1] 0 0 0

벡터의 논리연산

논리연산이란 아래 표와 같이 2개의 값을 비교하여 그 결과가 TRUE or FALSE 로 나오는 연산을 말한다.

연산자 예시 해석
== A == B A B와 같은가?
!= A != B A B와 다른가? (! 은 not 을 의미)
A > B A B보다 큰가?
A < B A B보다 작은가?
>= A >= B A B보다 크거나 같은가?
<= A <= B A B보다 작거나 같은가?
%in% A %in% B B에 A의 원소들이 있는가?
# 벡터와 스칼라의 논리연산

> x <- c(1,2,3,4,5)
> x >= 4
[1] FALSE FALSE FALSE  TRUE  TRUE 

# 벡터와 벡터의 논리연산

> y <- c(1,0,0,0,5)
> x == y
[1]  TRUE FALSE FALSE FALSE  TRUE # 두 벡터의 대응하는 값들끼리 비교함

다양한 조건을 만족하는 값을 찾고싶을 경우 다음 연산자를 이용한다

연산자 예시 해석
& A & B A and B (교집합)
| A | B A or B (합집합)
! A not B A not B (차집합)

 

# 다중조건
> x <- c(1,2,3,4,5)
> x > 2 & x <5
[1] FALSE FALSE  TRUE  TRUE FALSE

# 다중조건을 만족하는 값들을 불러올 때
> cond <- x <= 2 | x == 5
> cond
[1]  TRUE  TRUE FALSE FALSE  TRUE
> x[cond]
[1] 1 2 5 # TRUE에 대응하는 값들이 출력됨

벡터의 함수연산

벡터에 적용 가능한 연산 함수들은 다음과 같다.

함수명 기능
sum() 자료의 합
mean() 자료의 평균
median() 자료의 중앙값
max(), min() 자료의 최대, 최소값
var() 자료의 분산 값
sd() 자료의 표준 편차
sort() 자료를 정렬하여 출력
range() 자료의 범위 (최대값 ~ 최소값)
length() 자료의 개수
> x <- c(1,2,3,4,5,6,7,8,9)
> sum(x[x >= 5 & x < 8])
[1] 18 # 다중조건에 해당하는 5,6,7을 더해서 18
> mean(x)
[1] 5
> median(x)
[1] 5
> max(x)
[1] 9
> min(x)
[1] 1
> var(x)
[1] 7.5
> sd(x)
[1] 2.738613
> sort(x) # default는 오름차순
[1] 1 2 3 4 5 6 7 8 9
> sort(x, decreasing = T) # 내림차순
[1] 9 8 7 6 5 4 3 2 1
> range(x)
[1] 1 9
> length(x)
[1] 9