본문 바로가기

코드이야기/R

[R프로그래밍] 벡터의 의미와 벡터 관련 함수


물리학에서는 양을 스칼라와 벡터로 구분합니다. 스칼라가 크기만 가지고 있는 양인데 반해 벡터는 크기와 방향을 모두 가지고 있는 양을 의미합니다. R에서 벡터는 이와는 약간 다릅니다. R에서의 벡터의 의미, 특징, 그리고 벡터와 관련한 함수들에 대해 이야기해 보겠습니다.



벡터의 의의와 특징

R에서의 벡터는 단순한 자료형이 아닙니다. R은 여러 값을 집합으로 처리하는데 막강한 기능을 발휘합니다. 여러 값을 하나로 처리하기 위해 벡터를 사용합니다. 벡터는 C에서 사용하는 배열과 유사합니다. 벡터는 '값들의 집합'이라고 생각하면 됩니다. 실제로 R에서는 스칼라인 하나의 숫자도 하나의 원소를 가진 벡터로 취급합니다. 어떤 벡터 안의 각 수치를 요소라고 부릅니다. R에서 벡터의 특징은 아래와 같습니다.

1. 벡터는 C()함수로 작성한다

2. 벡터의 인덱스는 1부터 시작한다.(0이 아니다)

3. 하나의 벡터에는 하나의 자료형(숫자, 문자, 불린 등)만 사용할 수 있다

4. 벡터에서 결측값은 'NA'를 사용한다

5. NULL은 어떤 형식도 취하지 않는 특별한 객체다

코드를 통해 한 번 확인해 보겠습니다.
> # 1부터 10까지의 숫자를 가진 벡터 x 생성
> x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)     
> x
[1]  1  2  3  4  5  6  7  8  9 10
 > mean(x)        # 벡터 x의 평균 계산
[1] 5.5
> x[0]            # 벡터 x의 0번째 인덱스 
numeric(0)
> x[1]            # 벡터 x의 1번째 인덱스
[1] 1
> x[1:6]          # 벡터 x의 첫 6개의 인덱스
[1] 1 2 3 4 5 6
> # 수치, 문자, 불린을 모두 포함한 벡터 생성(문자로 강제 변환)
> y <- c(1, 2, "R is beautiful", TRUE)   
> y
[1] "1"              "2"              "R is beautiful" "TRUE"     
> # 수치와 불린을 포함한 벡터생성(숫자로 강제 변환)
> y <- c(1, 2, TRUE, FALSE)    
> y
[1] 1 2 1 0
> x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, NA)   # NA를 포함한 벡터 생성
> mean(x)            # NA를 포함한 평균 계산(NA)
[1] NA
> mean(x, na.rm=T)   # 평균 계산시 NA를 제거(정상)
[1] 5.5
> x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, NULL)  # NULL을 포함한 벡터 생성
> mean(x)            # NULL을 포함한 평균계산(정상)
[1] 5.5

벡터 관련 함수들

이제 벡터와 관련한 함수들을 살펴 보겠습니다. R을 실행하고 직접 한 번 입력해 보시기 바랍니다. 데이터는 1부터 10까지의 숫자 벡터 x와 11부터 20까지의 숫자벡터 y를 사용한다고 가정하겠습니다.

[벡터의 기본연산과 관련한 함수]

 함수

사용법 

결과 

의미 

 cor()

 cor(x, y)

 1

 벡터 x와 y의 상관계수

 cumsum()

 cumsum(x)

 1 3 6 10 15 21 28 36 45 55 

 벡터 x의 누적합

 length()

 length(x) 

 10 

 벡터 x의 길이 

 max()

 max(x)

 10 

 벡터 x의 최대값 

 min()

 min(x) 

 1 

 벡터 x의 최소값 

 prod()

 prod(x)  

 3628800

 벡터 x의 각 요소의 곱

 range()

 range(x) 

 1 10 

 벡터 x의 범위

 rev()

 rev(x) 

 10 9 8 7 6 5 4 3 2 1 

 벡터 x의 각 요소의 역순

 sd()

 sd(x) 

 3.02765 

 벡터 x의 표준편차 

 sum()

 sum(x)   55

 벡터 x의 총합 

 var()

 var(x)   9.166667 

 벡터 x의 분산 

 summary()

 summary(x) 

 생략   벡터 x의 요약 통계량 

 unique()

 unique(x)    1 2 3 4 5 6 7 8 9 10

 벡터 x에서 중복된 값을 제거한 벡터 


[수열 벡터 생성을 위한 함수]

특정 조건을 만족하는 수열을 생성하고 싶을 경우 seq() 함수와 req() 함수를 사용할 수 있습니다.

> seq(from=1, to=100, by=1)   # 1에서 100까지 1씩 증가하는 수열 생성
  [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18
 [19]  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36
 [37]  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54
 [55]  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72
 [73]  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90
 [91]  91  92  93  94  95  96  97  98  99 100
> seq(from=1, to=100, by=3)   # 1에서 100까지 3씩 증가하는 수열 생성
 [1]   1   4   7  10  13  16  19  22  25  28  31  34  37  40  43  46  49  52
[19]  55  58  61  64  67  70  73  76  79  82  85  88  91  94  97 100
> seq(from=1, to=100, by=2.5)   # 1에서 100까지 2.5씩 증가하는 수열 생성 
 [1]  1.0  3.5  6.0  8.5 11.0 13.5 16.0 18.5 21.0 23.5 26.0 28.5 31.0 33.5 36.0
[16] 38.5 41.0 43.5 46.0 48.5 51.0 53.5 56.0 58.5 61.0 63.5 66.0 68.5 71.0 73.5
[31] 76.0 78.5 81.0 83.5 86.0 88.5 91.0 93.5 96.0 98.5
> rep(1:3, 3)    # 1에서 3까지의 수열을 3번 반복
[1] 1 2 3 1 2 3 1 2 3
> rep(c(3, 6, 9), 3)  # 3, 6, 9의 원소를 가신 벡터를 3번 반복
[1] 3 6 9 3 6 9 3 6 9