R에서 백터 생성 하기

빅데이터/R 2018. 12. 9. 14:17

R에서 백터 생성 하기



1. 백터 생성 하기

두 개 이상의 값으로 이루어진 벡터를 생성할 때와 하나의 값으로 이루어진 벡터를 생성하는 방법은 서로 다릅니다. 두 개 이상의 값으로 이루어진 벡터를 생성하는 방법에는 대표적으로 5가지가 있는데, c(), 콜론(:), seq(), sequence(), rep()가 있습니다.


1) c()

c() 함수는 combine 또는 concatenate의 약자입니다. 벡터를 생성하는 가장 대표적인 방법으로 4가지 유형(수치형, 문자형, 논리형, 복소수형)에 모두 적용 가능합니다. 규칙이 없는 데이터로 이루어진 벡터를 생성할 때 사용합니다.

> v1 = c(135)
> v2 = c(103050)
> v3 = c(v1, v2)
> v3
[11 3 5 10 30 50
cs


기본적으로 하나의 값을 콤마로 구분하여 입력하고, 두 개 이상의 값으로 이루어진 벡터를 콤마로 넣어도 최종적으로는 하나의 벡터가 되도록 해줍니다.


2) 콜론(:)

콜란(:)은 수치형에만 사용되는데 1씩 증가되거나 1씩 감소하는 규칙이 있는 값으로 이루어진 벡터를 생성할 때 사용합니다. start : end 와 같은 구조로 되어 있으며, start, end는 start > end이면 1씩 감소하고 start < end이면 1씩 증가합니다. 값의 시작은 무조건 start에서 시작하며 end를 넘기지 않습니다. 이와같은 방식으로 벡터를 생성할 때도 사용하지만, 다른 데이터 형태에서 연달아 있는 특정한 행이나 열의 데이터를 추출할 때 사용할 수 있습니다.

> z1 = 1 : 5
> z1
[11 2 3 4 5
> z2 = 5 : 1
> z2
[15 4 3 2 1
> z3 = -3.3 : 5
> z3
[1-3.3 -2.3 -1.3 -0.3  0.7  1.7  2.7  3.7  4.7  # 1씩 증가하므로 -0.3에서 0.7이 되는것에 주의
> z4 = 5 : -3.3
> z4
[1]  5  4  3  2  1  0 -1 -2 -3
cs


3) seq()

seq() 함수는 sequence의 약자로 콜론(:)의 확장 또는 일반화 버전이라고 할 수 있습니다. 콜론은 1씩 증가 혹은 감소하는 수치형의 벡터를 생성하지만 seq() 함수는 1 외의 증감 규칙이 있는 수치형 벡터를 생성합니다. argument 값으로 from(시작값), to(끝값), by(증감값)가 있는데, 여기에서 증감값은 얼마씩 증가 또는 감소시킬지를 정하는 단계값입니다. 만약 값을 감소시키고자 한다면 부호가 음수여야 하며 이렇게 일정값만큼 증가/감소하는 수열을 등차 수열이라고 합니다.

> v1 = seq(from=1, to=5, by=1)    # 1부터 시작해서 5를 넘지 않을 때까지 1씩 증가하는 수치형 벡터 생성
> v1
[11 2 3 4 5
> v2 = seq(from=1, to=5, by=0.5)    # 1부터 시작해서 5를 넘지 않을 때까지 0.5씩 증가하는 수치형 벡터 생성
> v2
[11.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
> v3 = seq(from=5, to=1, by=0.5)    
Error in seq.default(from = 5, to = 1, by = 0.5)    # 5부터 1까지 0.5씩 감소시키고 싶지만 부호가 양수기 때문에 에러 발생
  wrong sign in 'by' argument
> v3 = seq(from=5, to=1, by=-0.5)    # 5부터 1까지 0.5씩 감소하는 벡터 생성(by값에 음수를 붙여줌)
> v3
[15.0 4.5 4.0 3.5 3.0 2.5 2.0 1.5 1.0
cs


4) sequence()

sequence() 함수는 sequence(숫자) 형태로 사용됩니다. 1과 지정한 숫자 사이의 정수로 이루어진 수치형 벡터를 생성합니다.

> v1 = sequence(10)    # 1~10 사이의 정수를 수치형 벡터로 생성
> v1
[1]  1  2  3  4  5  6  7  8  9 10
> v2 = sequence(5.5)    # 1~5.5 사이의 정수만 수치형 벡터로 생성
> v2
[11 2 3 4 5
> v3 = sequence(1)    # 1 본인 자신만 가짐
> v3
[11
> v4 = sequence(0)    # 벡터는 생성되었지만 값은 없는 상태(초기화할 때 사용 가능)
> v4
integer(0)
> v5 = sequence(-3)    # 음수를 지정했기 때문에 오류 발생
Error in FUN(X[[i]], ...) : 
  argument must be coercible to non-negative integer
> v5
Error: object 'v5' not found
cs


5) rep()

rep() 함수는 replicate의 약자로 복사하다/반복하다의 뜻을 가지고 있습니다.

argument

설명

x

복사하고 싶은 벡터를 지정

times

times에 지정된 벡터가 하나의 수치라면, 
복사하고 싶은 벡터 전체를 times만큼 복사하여 새로운 벡터를 생성함

times에 지정된 것이 수치형 벡터이면, 
복사하고 싶은 벡터의 원소 각각을 times 
지정된 벡터의 원소만큼 복사해서 새로운 벡터를 생성함

each

each에 지정된 숫자만큼 스칼라나 벡터의 원소를 각각 복사해서 
하나의 벡터가 생성하도록 함(여기에 오는 숫자는 양수이다.)

length.out

생성되는 벡터의 길이를 지정하며, 이 길이도 양수값이어야 한다.


> v1 = rep("a", times=5)   # "a"라는 문자형 데이터를 5번 복사해서 문자형 벡터인 v1을 생성
> v1
[1"a" "a" "a" "a" "a"
> v2 = rep("a", each=5)   # "a"라는 문자형 데이터를 각각 5번 복사해서 v1을 생성(문자가 a 하나기 때문에 times와 동일)
> v2
[1"a" "a" "a" "a" "a"
> v3 = rep(c("a""b"), times=3)    # 두 개의 문자형 "a"와 "b"를 가지는 벡터의 값을 전체적으로 3번 복사해서 v3를 생성
> v3
[1"a" "b" "a" "b" "a" "b"
> v4 = rep(c("a","b"), each=3)    # 두 개의 문자형 "a"와 "b"를 가지는 벡터의 값을 각각 3번 복사해서 v4를 생성
> v4
[1"a" "a" "a" "b" "b" "b"
> v5 = rep(c("a","b"), times=3, each=2)    # each가 먼저, 그 다음 times가 적용되어 v5를 생성
> v5
[1"a" "a" "b" "b" "a" "a" "b" "b" "a" "a" "b" "b"
> v6 = rep(c("a","b"), times=c(105))    # 속성 위치에 맞게 "a" 데이터를 10개, "b"를 5개 v6에 생성
> v6
[1"a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "b" "b" "b" "b" "b"
cs


rep()함수에 times와 each라는 두 개의 argument가 동시에 사용되었을때 R에서는 뒤에서부터 코드가 적용되므로 each가 먼저, 그 다음 times가 적용되어 위와 같은 결과가 나오지만 rep() 함수에서는 times와 each의 위치가 바뀌어도 결과는 동일합니다.(어느것이 먼저 적용되어도 결과는 같기 때문으로 판단됨)