R 데이터 변환 - R deiteo byeonhwan

R의 형 변환은 암시적으로 발생할 수 있고, 때에 따라 형 변환이 전혀 예상치 않은 곳에서 일어난다. 예를 들어, 데이터 프레임 d에 2개 컬럼이 있고 각 컬럼의 데이터 타입이 numeric(숫자를 저장한 벡터)이라고 가정하자. 이때 d[, 1]은 첫 번째 컬럼의 데이터를 데이터 프레임이 아닌 numeric(즉, 벡터)으로 반환한다. d에 대한 연산의 결과가 데이터 프레임이 아니라 numeric이라는 점은 사용자를 당황하게 할 수 있는 점이며, 이러한 변환을 피하고 싶다면 drop=FALSE를 지정해야 한다. 또는 파일에서 문자열을 불러들였을 때 data.frame( )으로 데이터 프레임을 생성하면서 stringsAsFactor=FALSE를 지정하지 않으면 문자열이 character(문자열 벡터)가 아니라 팩터가 된다.

이와 같은 암시적 형 변환에 대비하기 위해 모든 의심스러운 함수 호출 뒤에는 ‘2.9 타입 판별’ 절에서 설명한 str( ), class( )를 사용해 현재 사용하는 데이터가 올바른 데이터 타입인지 계속 확인할 필요가 있다.

반면 타입을 강제로 변환하고자 할 때도 있을 것이다. 문자열 벡터를 팩터로 변환하는 경우 등이 그 예다. 이러한 변환을 하는 한 가지 방법은 타입 이름이 ‘typename’이라 할 때 ‘as.typename( )’이라는 함수를 사용하는 것이다. 다음에 관련 함수의 목록을 보였다.

표 2-24 데이터 타입 변환 함수

함수

의미

as.factor(x)

주어진 객체 x를 팩터로 변환

as.numeric(x)

주어진 객체 x를 숫자를 저장한 벡터로 변환

as.character(x)

주어진 객체 x를 문자열을 저장한 벡터로 변환

as.matrix(x)

주어진 객체 x를 행렬로 변환

as.array(x)

주어진 객체 x를 배열로 변환

as.data.frame(x)

주어진 객체 x를 데이터 프레임으로 변환

또 다른 타입 변환 방법은 factor( ), data.frame( ) 등과 같이 데이터를 생성하는 함수에 다른 타입의 데이터를 인자로 넘겨주는 것이다. 이 경우 필요에 따라 형 변환이 수행된다.

신간 소식 구독하기

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

19. R 자료형/자료구조 바꾸기

R 데이터 변환 - R deiteo byeonhwan

R 프로그래밍 기초 19.
자료형 / 자료구조 변환

차례
1. 자료형 변환 : as. 원하는자료형
- as.character()
- as.complex()
- as.numeric() / as.double() / as.integer()
- as.logical()

2. 자료구조 변환

- as.data.frame() / as.list() / as.matrix() / as.vector()
- as.factor()

1. 자료형 변환 : as. 원하는자료형
as.character : 문자형으로

> x <- 0:5 > x [1] 0 1 2 3 4 5 > str(x) int [1:6] 0 1 2 3 4 5 > x <- as.character(x) > x [1] "0" "1" "2" "3" "4" "5" > str(x) chr [1:6] "0" "1" "2" "3" "4" "5"

as.numeric : 숫자형으로
as.double : 숫자형으로

> x <- as.numeric(x) > x [1] 0 1 2 3 4 5 > str(x) num [1:6] 0 1 2 3 4 5 > > x <- as.complex(x) > x [1] 0+0i 1+0i 2+0i 3+0i 4+0i 5+0i > str(x) cplx [1:6] 0+0i 1+0i 2+0i ... > > x <- as.double(x) > x [1] 0 1 2 3 4 5 > str(x) num [1:6] 0 1 2 3 4 5


as.logical : True or False로
- 0 : False
- 0을 제외한 나머지 숫자 : True

> x <- as.character(x) > x <- as.integer(x) > x [1] 0 1 2 3 4 5 > str(x) int [1:6] 0 1 2 3 4 5 > > x <- as.logical(x) > x [1] FALSE TRUE TRUE TRUE TRUE TRUE > str(x) logi [1:6] FALSE TRUE TRUE TRUE TRUE TRU


주의사항 )
logical → integer
- True : 1
- False : 0

> x <- as.integer(x) > str(x) int [1:6] 0 1 1 1 1 1 > x [1] 0 1 1 1 1 1


문자에서 숫자 변환은 에러
- 다음은 에러가 난다

x <- c("M","M","F") x str(x) x <- as.integer(x) x <- as.numeric(x) x <- as.logical(x)

2. 자료구조 변환
as.data.frame / as.list / as.matrix / as.vector

> # as.data.frame : 데이터프레임으로 > x <- 0:5 > str(x) int [1:6] 0 1 2 3 4 5 > x <- as.data.frame(x) > str(x) 'data.frame': 6 obs. of 1 variable: $ x: int 0 1 2 3 4 5 > > > # as.list : 리스트로 > x <- as.list(x) > x $x [1] 0 1 2 3 4 5 > str(x) List of 1 $ x: int [1:6] 0 1 2 3 4 5 > > > # as.matrix : 매트릭스로 > x <- 0:5 > x <- as.matrix(x) > x [,1] [1,] 0 [2,] 1 [3,] 2 [4,] 3 [5,] 4 [6,] 5 > str(x) int [1:6, 1] 0 1 2 3 4 5 > > # as.vector : 벡터로 > x <- as.vector(x) > x [1] 0 1 2 3 4 5 > str(x) int [1:6] 0 1 2 3 4 5


as.factor
- factor에서 int가 되면서 숫자 1부터 시작한다.(첫번째 레벨)

> x <- as.factor(x) > x [1] 0 1 2 3 4 5 Levels: 0 1 2 3 4 5 > str(x) Factor w/ 6 levels "0","1","2","3",..: 1 2 3 4 5 6 > > x <- as.integer(x) > x [1] 1 2 3 4 5 6 > str(x) int [1:6] 1 2 3 4 5 6


예시) 첫번째 레벨인 F가 1 / 두번째 레벨인 M이 2

> x <- c("M","M","F","M","F") > x <- factor(x) > x [1] M M F M F Levels: F M > str(x) Factor w/ 2 levels "F","M": 2 2 1 2 1 > > x <- as.integer(x) > x [1] 2 2 1 2 1 > str(x) int [1:5] 2 2 1 2 1