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"