R 벡터(vector) 합치기, 병합 방법

R프로그래밍에서 벡터(Vector)가 가장 기본적인 자료형이다. 벡터를 얼마나 잘 다루는지에 따라 R을 잘 다루는지 아닌지 알 수가 있다. 벡터를 만들어서 각각 결과치를 만들었을때, 여러개의 벡터끼리 합치기도 하고 나누려 했을 때, 막상 잘 생각이 나질 않는다. 내가 알고 있는 방법을 정리해본다.

1. c 함수 이용하기

우리가 R 프로그래밍을 배울때 가장 먼저 배우는 표현식이 c() 인데, 이게 문법이 아니라 하나의 함수이다. RStudio 툴에서 F1 를 누르면 아래와 같은 도움말을 볼 수 있다.

Combine Values into a Vector or List

Description

This is a generic function which combines its arguments.

The default method combines its arguments to form a vector. All arguments are coerced to a common type which is the type of the returned value, and all attributes except names are removed.

그렇다보니, 2개의 벡터끼리의 합치는 방법은 c() 로 묶기만 하면 된다.

a = c(1,2)
b = c(10,20)

c(a,b) 
# [1]  1  2 10 20

c(c(1,2), c(10,20))
# [1]  1  2 10 20

만약 자료형이 다른 것들도 합칠 수 있을까? 있긴하다. 의도치 않은 결과가 나올 수도 있지만, 문자열이 포함되어 버리면, 거의 문자열로 변경된다 보면 된다.

x = c("a","b")
y = c(10,20)
c(x,y)
# [1] "a"  "b"  "10" "20"

2. append 함수 이용하기

c 함수를 사용해도 되지만, 특정위치에 삽입하고 싶다면 append 함수를 사용하면 된다. 우선 간단하게 2개의 벡터를 입력하면 뒤에 붙여 연결된다.

a = c(1,2)
b = c(10,20)
append(a,b)
# [1]  1  2 10 20

특정위치에 삽입하고 싶다면, after 옵션을 사용하면 된다. 결과를 보면 어떻게 작동하는지 쉽게 알 수 있다.

append(a,b, after = 0)
# [1] 10 20  1  2

append(a,b, after = 1)
# [1]  1 10 20  2

append(a,b, after = 2)
# [1]  1  2 10 20

3. list-unlist 함수 사용하기

list 함수를 사용해서도 벡터간에 병합이 가능하다. 리스트를 만들어놓고, unlist 함수를 이용해서 각 element 들을 합치는 방법이다.

a = c(1,2)
b = c(10,20)
l = list(a,b)
l
# [[1]]
# [1] 1 2
# 
# [[2]]
# [1] 10 20

unlist(l)
# [1]  1  2 10 20

정리하면..

벡터끼리 병합하는 방법을 몇가지 정리해봤지만, 그래도 c 함수를 쓰는게 가장 쉽다. 여기에 언급되지 않은 여러가지 방법이 더 있을 수 있고, 그때 그때 상황에 맞게 사용할 수 있도록 이런 방법이 있다는 정도만 알고 있으면 될거 같다.

r 

더 보면 좋을 글들