R 프로그래밍

#1_R에서 벡터를 생성하기

iT잔나비 2021. 1. 5. 12:28

# 벡터란, 두개 이상의 값으로 이루어진 R데이터를 말함

# 대표적인 방법 → c(), seq(), sequence(), rep()

1. c()함수

# c는 combine 또는 concatenate의 약자
# 벡터를 생성하는 가장 대표적인 방법
# 수치형 문자형, 논리형, 복소수형에 모두 적용가능

ex_

> v1 <- c(1,2,"numeric", 4:9)
> v1
 [1] "1" "2" "numeric" "4" "5" "6" "7" "8" "9" 

 

2. " : " 콜론

# 콜론( : )은 수치형에만 적용
# 1씩 증가, 1씩 감소되는 규칙이 있는 값을 생성할 때 사용
# start : end 구조를 가짐
# start, end는 숫자 → start > end이면 1씩 감소, start < end이면 1씩 증가, start = end이면 start 또는 end가 됨
# 시작하는 결과치는 무조건 start, end를 넘지 않음

ex_

> v1 <- 1:5
> v1
[1] 1 2 3 4 5
> v2 <- 5:1
> v2
[1] 5 4 3 2 1
> v3 <- -3.3:5
> v3
[1] -3.3 -2.3 -1.3 -0.3  0.7  1.7  2.7  3.7  4.7
> v4 <- 5:-3.3
> v4
[1]  5  4  3  2  1  0 -1 -2 -3

 

3. seq()함수

argument 설명
from 시작값
to 끝값
by 얼마씩 증가 또는 감소 시킬지 정하는 단계값
#감소시킬 경우: 부호는 음수여야 함

ex_

> seq(from<-1, to<-5, by<-1) #1부터 5까지 1씩 증가하는 수치형 벡타를 생성
[1] 1 2 3 4 5
> seq(from<-5, to<-1, by<--0.5) #5부터 1까지 0.5씩 감소하는 수치형 벡타를 생성
[1] 5.0 4.5 4.0 3.5 3.0 2.5 2.0 1.5 1.0

Tips:
1) argument는 생략할 수 있음
    but, 초보인 경우, R에서 함수의  argument는 가능하면 생략하지 않고 쓰도록, 보는 자와 자신에게 유리함.
2) argument의 순서는 문법에 영향을 안줌
    but, 통일성을 갖춘 좋은 습관은 분석할 때 편리

ex_

> seq(80,25,-9)
[1] 80 71 62 53 44 35 26
> seq(to = 25, from = 80, by = -9)
[1] 80 71 62 53 44 35 26

4. sequence()함수

# 1부터 시작하여 설정값까지 사이의 정수 형태인 수치형 벡터를 생성
# 설정값은 숫자이고, 음수면 안됨

ex_

> sequence(10)
 [1]  1  2  3  4  5  6  7  8  9 10
> sequence(5.5)
[1] 1 2 3 4 5
> sequence(-8)
Error in FUN(X[[i]], ...) : 
  argument must be coercible to non-negative integer

 

5. rep()함수

# rep는 replicate의 약자(복사, 반복의 뜻)
# 수치형, 문자형, 논리형, 복수형으로 된 벡터를 생성할 수 있음
# 함수에 지정된 데이터를 복사해주는 기능

 

argument 설명
x 복사하고 싶은 벡터를 지정
times
(전체적으로..)
times에 지정된 벡터가 하나의 수치라면, 복사하고 싶은 벡터 전체를 times만큼 복사하여 새로운 벡터를 생성함
times에 지정된 것이 수치형 벡터이면, 복사하고 싶은 벡터의 원소 각각을 times에 지정된 벡터의 원소만큼 복사해서 새로운 벡터를 생성함
each each에 지정된 숫자만큼 스칼라나 벡터의 원소를 각각 복사해서 하나의 벡터가 생성하도록 함
#여기에 오는 수는 양수
length.out 생성되는 벡터의 길이를 지정
#여기에 오는 수는 양수

ex_

> v1 = rep("a",times=5) #"a"라는 문자형 데이터를 5번 복사해서 문자형 벡터 v1을 생성
> v1
[1] "a" "a" "a" "a" "a"
> v3 = rep(c("a","b"),times=3) #"a"와"b"를 하나의 벡터로 보고 전체적으로 3번 복사
> v3
[1] "a" "b" "a" "b" "a" "b"
> v5 = rep(c("a","b"),times=2, each=3)
> v5
 [1] "a" "a" "a" "b" "b" "b" "a" "a" "a" "b" "b" "b"
> v6 = rep(c("a","b"),times=c(10,5)) #"a"데이터를 10개 생성, 다음 "b"데이터를 5개 생성하여, 하나의 벡터를 생성
> v6
 [1] "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "b" "b" "b" "b" "b"