Table of Contents
데이터타입_ 벡터 연산 목차
벡터 간 산술연산
: componentwise로 이루어짐.
> x <- 1:3; y <- c(2, 2, 2)
> x + y
##3 4 5
> x – y
###-1 0 1
재사용 규칙
: 크기가 안맞으면 처음부터 재사용 -> 길이가 짧은 벡터를 반복적으로 다시 사용해 길이가 긴 벡터와 길이가 같아지도록 연장한 뒤 연산 실시
> z <- rep(2, 5)
> x + z
#c(1, 2, 3, 1, 2) + c(2, 2, 2, 2, 2)
##[1] 3 4 5 3 4
##대신 경고문 띄워줌
- 벡터와 스칼라 간의 연산 :스칼라 객체를 길이가 1인 벡터로 보고 재사용규칙을 적용한 것.
> y - 3 # y - rep(3, length(y))와 같은 효과 ##-1 -1 -1
논리값벡터(logical vector)
- and : &
-
or : -
- TRUE는1로,FALSE는0
- Sum 등 연산 가능
> x <- 1:10; y <- rep(5, 10)
> x < 5 # less than
##TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
> x <= 5 # less than or equal to
##TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
> x == 5 # equal[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
> (x > 5) & (y < 2)
#and
##FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> (x < 5) | (y < 2)
#or
##TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
> z <- x < 5
> sum(z)
#z=TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
#sum->True의 개수
벡터 속성 확인, 변환
-
- typeof()
- 벡터를 구성하는 성분의 타입을 알려주는 함수
-
- is.double()
- 실수타입인지 여부를 논리값으로 알려주는 함수
-
- is.numeric()
- 수치벡터인지 여부를 논리값으로 알려주는 함수 TRUE는1로,FALSE는0
-
- as.numeric()
- 수치벡터로 변환해주는 함수
- length() :벡터의 길이를 계산해주는 함수
> typeof(x)
##"integer"
> is.double(x)
##FALSE
> is.numeric(z)
##FALSE
> as.numeric(v)
##1 0 0 1
> length(fruit)
##3
다양한 통계함수 제공
-
- rnorm(a)
- 난수를 a개 생성
-
- round(a,b)
- a를 반올림하여 소수점 b째 자리 까지만 나타냄
> x <- round(rnorm(10), 2)
> y <- 1:10
> z <- -5:4
> x
##-0.28 0.08 -1.82 0.32 1.61 -0.94 -0.39 0.91 2.22
> max(x) #최대값
##2.22
> min(x) #최소값
##-1.82
> sum(x) #모든성분의합
##3.43
> prod(x) #모든성분의곱
##0.02675534
> cumsum(x) #누적합
##-0.28 -0.20 -2.02 -1.70 -0.09 -1.03 -1.42 -0.51 1.71 3.43
> cumprod(x) #누적곱[1]
#-0.280000000 -0.022400000 0.040768000 0.013045760 0.021003674 -0.019743453 0.007699947 0.007006952 0.015555432 0.026755344
> cummax(x) #누적최대값
##-0.28 0.08 0.08 0.32 1.61 1.61 1.61 1.61 2.22 2.22
> mean(x) #평균
##0.34
> median(x) #중앙값
##0.2
> range(x) #자료값의범위(최소값,최대값)
##-1.82 2.22
> quantile(x, probs = c(0.2, 0.7)) #분위수
#하위 20% , 70%에 위치한 두 숫자 제시
#20% 70%-0.50 1.12
> var(x) #분산
#1.629534
#분산이 크면 자료가 흩어진 정도가 심하다
> sd(x) #표준편차
#1.276532
> cov(x, y) #공분산
#2.330556
#두 자료가 얼마나 비슷하게 변하느냐
#0근처이면 공분산이 거의 없다는 것 = 두 변수가 같은 방식으로 변동하는 정도가 약함
> cor(x, y) #상관계수
#0.6030065
#자료값을 표준화한 뒤 구한 공분산
#나올 수 있는 범위는 -1부터 1까지
#상관계수가 0 근처이면 두 변수 사이에 선형종속성이 약함을 의미
여러 벡터 간 성분 별 최대 최소 계산
> pmax(x, y, z) #각 성분별로 구한 최대값으로 구성된 벡터
# 1 2 3 4 5 6 7 8 9 10
# ex
x y z 결과
2 9 8 9
7 5 5 7
5 3 2 5
> max(x, y, z) # x, y, z를통틀어최대인값
## 10
> pmin(x, y, z) #각 성분별로 구한 최소값으로 구성된 벡터
## -5.00 -4.00 -3.00 -2.00 -1.00 -0.94 -0.39 0.91 2.22 1.72
> min(x, y, z) # x, y, z를통틀어최소인값
## -5
벡터 내 성분값 크기순 정렬
> x[1]
##-0.28 0.08 -1.82 0.32 1.61 -0.94 -0.39 0.91 2.22 1.72
> sort(x, decreasing = FALSE) #벡터를크기순으로정렬
[1] -1.82 -0.94 -0.39 -0.28 0.08 0.32 0.91 1.61 1.72 2.22
> rank(x) #오름차순의 순위정보
## 4 5 1 6 8 2 3 7 10 9
> order(x, decreasing = FALSE) # permutation정보
## 3 6 7 1 2 4 8 5 10 9
# 오름차순으로 정렬을 했을 때 x의 3번째값이 첫번째로 오면 된다
> x[order(x)] # sort(x)와 같은 효과
## -1.82 -0.94 -0.39 -0.28 0.08 0.32 0.91 1.61 1.72 2.22
인덱스벡터
> x <- -10:10
> x[3] # 3번쨰 값 추출
##-8
> x[1:3] ##1~3번째 값 추출
## -10 -9 -8
> x[c(1, 3, 5)]
## -10 -8 -6
### 인덱스에 (-) 사용
: 해당 성분을 제외하라는 의미.
> x[-1]
## -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10
> x[-c(1, 3, 5)]
## -9 -7 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10
같이 풀어볼 문제
- 인덱스 벡터를 이용해 주어진 숫자 벡터의 성분 별 절대값을 계산하는 예제
> y <- x[x < 0] # x에서 음수인 성분을 추출해 y에 할당 > x[x < 0] <- -x[x < 0] #절대값벡터
- 결측치를 원하는 값으로 대체하는 예제
> x <- c(1, 2, 3, NA, 5) > x[!is.na(x)] ## 1 2 3 5 > x[is.na(x)] <- 4 #결측인성분을4로채우기 ## x[1] 1 2 3 4 5