본문 바로가기

R/R을 이용한 데이터 처리&분석 실무

데이터 프레임의 행과 컬럼 합치기

반응형

rbind()와 cbind()는 각각 행 또는 컬럼 형태로 주어진 벡터, 행렬, 데이터 프레임을 합쳐서 결과로 행렬 또는 데이터 프레임을 만드는 데 사용한다. 이들 함수는 분리되어 저장된 데이터를 합치는 데 유용하게 사용할 수 있다.

함수 의미
rbind(...) 지정한 데이터들을 행으로 취급해 합친다.
cbind(...) 지정한 데이터들을 컬럼으로 취급해 합친다.

 

예를 들어, c(1,2,3), c(4,5,6)이라는 두 벡터는 r bind()를 사용해 각 벡터를 한 행으로 하는 행렬로 합칠 수 있다.

>rbind(c(1,2,3),c(4,5,6))
    [,1]  [,2]  [,3]
[1,]  1    2    3
[2,]  4    5    6

 

마찬가지로 데이터 프레임 역시 rbind()를 사용하여 행을 합칠 수 있다. 다음은 2개 행을 저장한 데이터 프레임 x와 새로운 값을 저장한 벡터 c(3,"c")를 rbind()로 합쳐서 새로운 데이터 프레임 y에 저장하는 예다.

>(x<-data.frame(id=c(1,2),name=c("a","b"),stringsAsFactors=F))
    id   name
1  1     a
2  2     b

>str(x)
'data.frame' :    2 obs.  of 2 variables:
$ id      : num 1 2
$ name : chr "a" "b"

>(y<-rbind(x,c(3,"c")))
    id   name
1  1     a
2  2     b
3  3     c

 

위 코드의 첫 행에서 stringsAsFactors는 name 컬럼의 데이터를 팩터가 아니라 문자열로 취급하기 위해 필요하다. 만약 stringsAsFactors를 지정하지 않으면 "a", "b"가 팩터 데이터로 취급되어 이름을 표현하려는 컬럼의 목적에 어긋나게 된다.

 

cbind()는 주어진 인자를 컬럼으로 취급하여 데이터를 합친다. 다음은 두 벡터를 합쳐 행렬로 만드는 예다.

>cbind(c(1,2,3),c(4,5,6))
     [,1]  [,2]
[1,]  1    4
[2,]  2    5
[3,]  3    6

 

마찬가지 방법으로 cbind()를 사용해 데이터 프레임에 새로운 컬럼을 추가할 수 있다.

>(y<-cbind(x,greek=c("alpha","beta")))
   id   name   greek
1  1     a        alpha
2  2     b        beta

>str(y)
'data.frame' :       2 obs. of 3 variables:
$ id      : num 1 2
$ name : chr "a" "b"
$ greek : Factor  w/2  levels "alpha","beta" : 1 2

>y<-cbind(x, greek=c("alpha", "beta"), stringsAsFactors=F)
>str(y)
'data.frame' :       2 obs. of 3 variables:
$ id      : num 1 2
$ name : chr "a" "b"
$ greek : chr "alpha","beta"

 

위 코드에서도 확인할 수 있듯이 stringsAsFactors를 FALSE로 지정하면 새로 추가된 greek 컬럼이 문자열 데이터가 되지만, 이를 생략하면 범주형 데이터인 팩터가 된다.

 

데이터 프레임에 새로운 컬럼을 추가할 때는 cbind()를 사용하지 않고 df$colname<-data 형태로도 추가할 수 있다. 이 내용은 앞서 데이터 프레임 타입에 대해서 살펴본 '데이터 프레임'절을 참고하기 바란다.

 

 

R을 이용한 데이터 처리&분석 실무 中

반응형

'R > R을 이용한 데이터 처리&분석 실무' 카테고리의 다른 글

apply 계열 함수 - 2  (0) 2020.02.02
apply 계열 함수 - 1  (0) 2020.02.01
파일 입출력  (0) 2020.01.31
아이리스 데이터  (0) 2020.01.31
함수의 정의  (0) 2020.01.30