• Home
  • About
    • Yerim Oh photo

      Yerim Oh

      Happy and worthwhile day by day :)

    • Learn More
    • Email
    • LinkedIn
    • Instagram
    • Github
    • Youtube
  • Posts
    • All Posts
    • All Tags
  • Projects

[03] R

10 Mar 2020

Reading time ~4 minutes

Table of Contents
  • 데이터타입_ 벡터 연산 목차
  • 벡터 간 산술연산
    • 재사용 규칙
    • 논리값벡터(logical vector)
  • 벡터 속성 확인, 변환
  • 다양한 통계함수 제공
  • 여러 벡터 간 성분 별 최대 최소 계산
  • 벡터 내 성분값 크기순 정렬
  • 인덱스벡터
  • 같이 풀어볼 문제

데이터타입_ 벡터 연산 목차

  • 벡터 간 산술연산
    • 재사용 규칙
    • 논리값벡터(logical vector)
  • 벡터 속성 확인, 변환
  • 다양한 통계함수 제공
  • 여러 벡터 간 성분 별 최대 최소 계산
  • 벡터 내 성분값 크기순 정렬
  • 인덱스벡터
  • 같이 풀어볼 문제

벡터 간 산술연산

: 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
    


RBasic Share Tweet +1