더북(TheBook)

‘as.typename( )’ 유형부터 살펴보자. 다음은 “a”, “b”, “c”가 저장된 문자열 벡터를 팩터로 변환했다가 다시 벡터로 변환하는 예다.

> x <- c("a", "b", "c")
> as.factor(x)
[1] a b c
Levels: a b c
> as.character(as.factor(x))
[1] "a" "b" "c"

다음은 행렬을 데이터 프레임으로 변환하는 예다.

> x <- matrix(1:9, ncol=3)
> as.data.frame(x)
  V1  V2  V3
1  1   4   7
2  2   5   8
3  3   6   9

또는 factor( ), matrix( ), data.frame( ) 등과 같은 데이터 생성 함수에 곧바로 다른 타입을 넘겨 형 변환을 할 수도 있다. 다음은 행렬을 데이터 프레임으로 변환하기 위해 matrix( )의 결과를 data.frame( )에 곧바로 넘긴 예다.

> (x <- data.frame(matrix(c(1, 2, 3, 4), ncol=2)))
  X1 X2
1  1  3
2  2  4

다음은 리스트를 data.frame( )에 넘겨 데이터 프레임으로 변환한 예다.

> data.frame(list(x=c(1, 2), y=c(3, 4)))
  x y
1 1 3
2 2 4

두 가지 방법이 모두 가능하다면 그 차이가 무엇일까? ‘as.typename( )’은 표현이 명확하고 간략하지만 경우에 따라 지원하는 변환의 정도가 약하다. 예를 들어, c(“m”, “f”)의 벡터를 as.factor( )로 변환하는 경우를 생각해보자. 이 경우 f가 알파벳 순서상 m보다 앞서므로 as.factor(c(“m”, “f”))의 결과에서 팩터의 레벨은 “f m”으로 정해진다. 팩터의 레벨을 “m f”로 하려면 어떻게 해야 할까? as.factor( )는 변환할 데이터 이상의 인자를 받지 않으므로 as.factor( )를 사용할 때 팩터의 레벨을 “m f”로 지정할 수 있는 방법이 없다. 팩터 레벨의 순서를 “m f”로 하고 싶다면 다음과 같이 factor( ) 함수를 써야 한다.

> as.factor(c("m", "f"))
[1] m f
Levels: f m
> factor(c("m", "f"), levels=c("m", "f"))
[1] m f
Levels: m f

따라서 상황에 따라 두 가지 방법을 모두 사용해보고 help(함수명)으로 볼 수 있는 도움말을 참고해 적절한 방식을 찾아 형 변환을 수행해야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.