정보

    • 업무명     : R을 이용한 통계 분석 및 데이터 시각화 : 벡터

    • 작성자     : 박진만

    • 작성일     : 2020-03-24

    • 설   명      :

    • 수정이력 :

     

     내용

    [개요]

    • R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어 내지 통계 분석 환경입니다. 

    • 통계 분석 기능으로 통계 검정, 선형 회귀 분석, 시계열 데이터 분석, 클러스터링 등을 지원하고 있습니다.

    • 또한 최신 논문에서 발표된 같은 새로운 기술도 R로 구현되는 경우가 많습니다.

    • 특히 시각화 기능으로 히스토그램, 막대 그래프, 선 그래프, 산포도, 나무 모양 그림이나 히트맵 등 기본적인 그래프가 기본으로 지원하고 있습니다.

    • 또한 ggplot2 등의 패키지를 사용하여 더 높은 수준의 그림을 가시화할 수 있습니다.

     

     

    [특징]

    • 데이터를 이해하기 위해서 통계 분석 및 데이터 시각화가 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어

       

    [기능]

    • 데이터형 소개

     

    [활용 자료]

    • 없음

     

    [자료 처리 방안 및 활용 분석 기법]

    • 없음

     

    [사용법]

    • 소스 코드 예시 참조

     

    [사용 OS]

    • Windows 10

     

    [사용 언어]

    • R v3.6.2

    • R Studio v1.2.5033

     

     소스 코드

    [벡터 생성]

    • 벡터의 생성은 c를 사용한다.

    • 여러 요소를 쉼표로 구분하여 c에 대입하면, 하나의 벡터가 생성된다. 

    • 또한 산술 급수 및 순환 수열 등 규칙성 있는 벡터를 생성하는 경우 seqrep등을 사용한다.

    x <- c(23, 17, 67, 127)
    x
    ## [1]  23  17  67 127
    
    x <- rep(c(1, 2), length = 10)
    x
    ##  [1] 1 2 1 2 1 2 1 2 1 2
    
    x <- rep(c(1, 2), times = 10)
    x
    ##  [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
    
    x <- rep(c(1, 2, 3), times = 3)
    x
    ## [1] 1 2 3 1 2 3 1 2 3
    
    x <- rep(c(1, 2, 3), times = c(3, 3, 3))
    x
    ## [1] 1 1 1 2 2 2 3 3 3
    
    x <- seq(1, 10, by = 2)
    x
    ## [1] 1 3 5 7 9
    
    x <- seq(1, 10, length = 2)
    x
    ## [1] 1 10
    
    x <- sequence(10)
    x
    ##  [1]  1  2  3  4  5  6  7  8  9 10
    
    x <- sequence(c(1, 2, 3, 4))
    x
    ##  [1] 1 1 2 1 2 3 1 2 3 4

     

    [벡터 요소 추가]

    • 기존의 벡터에 새로운 요소를 추가하거나 또는 2 개의 벡터를 결합시키고 싶은 경우, c또는 append를 사용한다.

    • c는 주어진 여러 벡터를 주어진 순서로 결합한다. 

    • append는 기본적으로는 c같은 기능을 하지만, after등의 옵션을 쓰면 첫 번째 벡터의 n 번째 요소 뒤에 두 번째 벡터를 삽입하는 등 조금 더 유연성이 있다.

    x <- c(1, 2, 3, 4, 5)
    y <- c(-1, -2, -3, -4, -5)
    
    w <- c(x, y)
    w
    ## [1]  1  2  3  4  5 -1 -2 -3 -4 -5
    
    w <- append(x, y)
    w
    ## [1]  1  2  3  4  5 -1 -2 -3 -4 -5
    
    w <- append(x, y, after = 2)
    w
    ## [1]  1  2 -1 -2 -3 -4 -5  3  4  5

     

    [벡터 요소 추출]

    • 벡터의 요소를 꺼낼 때에는 대괄호를 사용한다.

    • 대괄호 안에 요소의 인덱스를 삽입하는 방식으로 요소를 추출할 수 있다.

    •  이 때 대부분의 프로그래밍 언어에서의 인덱스는 0에서 시작하는 경우가 많지만,  R의 경우 1부터 인덱스가 시작된다.

    x <- c(21, 43, 556, 23)
    x[3]
    ## [1] 556
    
    x[c(1, 3)]
    ## [1] 21 556
    
    x[-3]
    ## [1] 21 43 23
    
    x[c(-1, -3)]
    ## [1] 43 23

     

    • 예를 들어 5 미만의 요소만을 취득 할 수 있도록 특정한 조건을 지정하여 그 조건에 맞는 요소만 선택한다고 가정한다면, 그에 따른 조건을 지정하여 요소를 추출할 수 있다.

    y <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    
    z <- (y < 5)
    z
    ## [1] T T T T F F F F F F
    
    y[z]
    ## [1] 1 2 3 4
    
    y[y < 5]
    ## [1] 1 2 3 4
    

     

    [벡터 정렬]

    • 벡터의 요소를 오름차순 또는 내림차순으로 정렬하는 경우 sort를 이용한다.

    x <- c(1, 10, 20, 30, 40, 50, 60, 1, 30)
    
    y <- sort(x)
    y
    ## [1]  1  1 10 20 30 30 40 50 60
    
    y <- sort(x, decreasing = TRUE)
    y
    ## [1] 60 50 40 30 30 20 10  1  1
    
    y <- sort(x, index.return = TRUE)
    y$x
    ## [1]  1  1 10 20 30 30 40 50 60
    y$ix
    ## [1] 1 8 2 3 4 9 5 6 7

     

    • 그리고 sort와 비슷한 기능을 가진 order함수가있다. 
    • sort의 경우 벡터의 요소를 정렬하고 그 결과를 돌려주는 반면, order는 벡터 요소의 결과가 아닌 인덱스 번호를 리턴해 준다.
    x <- c(1, 10, 20, 30, 40, 50, 60, 1, 30)
    
    y <- order(x)
    y
    ## [1] 1 8 2 3 4 9 5 6 7
    
    y <- x[order(x)]
    y
    ## [1]  1  1 10 20 30 30 40 50 60
    
    y <- x[order(x, decreasing = TRUE)]
    y
    ## [1] 60 50 40 30 30 20 10  1  1
    
    y <- x[rev(order(x))]
    y
    ## [1] 60 50 40 30 30 20 10  1  1
    
    
    x <- c(7, 3, 1, 9, 5) 
    y <- order(x) 
    z <- x[y] 
    z
    ## [1] 1 3 5 7 9
    
    w <- z[order(y)]
    w
    ## [1] 7 3 1 9 5

     

    [벡터 요소의 치환]

    • 벡터 값을 변경하려면 변경하려는 요소를 직접 지정하여 새 값을 대입하면 된다.

    x <- c(10, 20, 30, 40, 50)
    x[2] <- 0.2
    x
    ## [1]   10  0.2  30  40  50
    
    x[c(2, 4)] <- c(-20, -40)
    x
    ## [1]  10 -20  30 -40  50

     

    • 또한 replace를 이용할 수도 있다. replace(x, y, z)처럼 사용할 수 있으며, x는 대체 대상 벡터, y는 대체 위치 z에 치환 후의 내용을 대입하면 된다.

    x <- c(10, 20, 30, 40, 50)
    y <- c(2, 4)
    z <- c(-20, -40)
    
    w <- replace(x, y, z)
    w
    ## [1]  10 -20  30 -40  50

     

    [벡터의 계산]

    기호 예시 의미
    + a+b 벡터 a와 벡터 b의 합 (a1+b1, a2+b2, …, an+bn)
    - a-b 벡터 a와 벡터 b의 차이 (a1-b1, a2-b2, …, an-bn)
    * a*b 벡터 a와 벡터 b의 곱 (a1*b1, a2*b2, …, an*bn)
    / a/b 벡터 a와 벡터 b의 나누기 (a1/b1, a2/b2, …, an/bn)
    %/% a%/%b 벡터 a와 벡터 b의 몫 (a1%/%b1, a2%/%b2, …, an%/%bn)
    %% a%%b 벡터 a와 벡터 b의 나머지 (mod)(a1%%b1, a2%%b2, …, an%%bn)
    ^ a^b 벡터 a의 성분에 벡터 b의 성분 제곱 (a1b1, a2b2, …, anbn)

     

    x <- c(0:5)
    y <- c(5:0)
    x + y
    ## [1] 5 5 5 5 5 5

     

    • 계산 대상이되는 두 벡터의 길이가 다른 경우, 짧은 벡터의 요소가 반복된다. 

    • 이곳은 실수의 원인이되는 경우가 많으므로 주의해야 한다.

    x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)
    y <- c(1, 2, 3)
    x * y
    ## [1]  1  4  9  4 10 18  7 16 27
    
    x / y
    ## [1] 1.0 1.0 1.0 4.0 2.5 2.0 7.0 4.0 3.0

     

    [벡터의 집합 연산]

    • 벡터에 대해 두 벡터의의 합집합 또는 차집합을 계산하는 등의 집합 연산을 할 수있다.

    함수식 입력 식 의미
    union union(x, y) 합집합
    intersect intersect(x, y) 교집합
    setdiff setdiff(x, y) 차집합 (첫 번째 벡터에서 두 번째 벡터를 뺌)
    setequal setequal(x, y) 동일한 집합인지 비교
    x <- c(1:7)
    y <- c(4:9)
    
    union(x, y)
    ## [1] 1 2 3 4 5 6 7 8 9
    
    intersect(x, y)
    ## [1] 4 5 6 7
    
    setdiff(x, y)
    ## [1] 1 2 3
    
    setequal(x, y)
    ## [1] FALSE

     

    [다음글]

     

    [R] R을 이용한 통계 분석 및 데이터 시각화 : 행렬

    정보 업무명 : R을 이용한 통계 분석 및 데이터 시각화 : 행렬 작성자 : 박진만 작성일 : 2020-03-24 설 명 : 수정이력 : 내용 [개요] R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어 내지 통계 분석..

    shlee1990.tistory.com

     

    [이전글]

     

    [R] R을 이용한 통계 분석 및 데이터 시각화 : 데이터형

    정보 업무명 : R을 이용한 통계 분석 및 데이터 시각화 : 데이터형 작성자 : 박진만 작성일 : 2020-03-23 설 명 : 수정이력 : 내용 [개요] R은 통계 분석 및 시각화 등의 기능을 갖춘 프로그래밍 언어 내지 통계..

    shlee1990.tistory.com

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

    [기상학/프로그래밍 언어]

    • sangho.lee.1990@gmail.com

    [해양학/천문학/빅데이터]

    • saimang0804@gmail.com

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기