R에서는 데이터가 문자형, 실수형, 정수형, 논리형, 팩터형, 날짜형으로 유형이 구분됩니다. 데이터 유형은 일반적으로 숫자 데이터는 실수형으로, 텍스트 데이터는 문자형으로 저장되지만 때에 따라 잘못된 유형으로 정의될 수 있습니다. 이경우 쉽게 데이터 유형을 변환하기 위해 as() 함수를 사용합니다. 

 

16.1. as() 함수로 데이터셋 유형 변경

더보기

as() 함수는 기존의 데이터 유형을 강제로 변환하고자할 때 사용합니다. 주로 특정 함수의 투입요소(Input, Output)의 유형을 맞추고자 할 때 데이터 유형을 변환합니다. as() 함수를 파악하기 전에, 예시를 위해 이전 포스트인 <9. 데이터 구조 파악하기>를 참고해 student_dataset을 정의하겠습니다.

student_dataset <- read.csv(file="data/student_dataset.csv",
                            header=TRUE)

 

(1) as.character()

as.character() 함수는 데이터 유형을 문자형으로 변환하는 함수입니다. 모든 데이터 유형에서 변환 가능한데, 실수형인 korean 변수를 문자형으로 변환하고자 할 때 코드는 다음과 같습니다. 

as.character(student_dataset$korean)

출력 결과를 확인하면, korean 변수의 값들이 "(큰따옴표) 처리되어 실수에서 문자로 변환됐음을 확인할 수 있습니다. 

 

(2) as.numeric()

as.numeric() 함수는 데이터 유형을 실수형으로 변환하는 함수입니다. 원 변수의 데이터 유형에 따라 출력되는 값이 다른데, 그 경우는 다음과 같습니다.

  ①정수를 실수로 변환

as.numeric(student_dataset$math)

  ②팩터를 실수로 변환

     팩터를 실수로 변환할 경우, 팩터의 레이블이 아닌 레벨이 출력됩니다. 코드는 다음과 같습니다.

as.numeric(student_dataset$gender)

  ③논리형을 실수로 변환

     논리형을 실수로 변환할 시 TRUE는 1, FALSE는 0으로 출력됩니다. 코드는 다음과 같습니다.

as.numeric(student_dataset$test_pass)

 

(3) as.integer()

as.integer() 함수는 데이터 유형을 정수로 변환하는 함수입니다. 다만 소수점의 경우는 내림처리하여 출력합니다. 코드는 다음과 같습니다. 

as.integer(student_dataset$korean)

 

(4) as.logical()

as.logical() 함수는 실수, 정수인 데이터 유형을 논리형으로 변환할 때 사용합니다. 다만 값이 0일 경우 FALSE, 이외의 값은 TRUE로 변환합니다. 코드는 다음과 같습니다. 

as.logical(student_dataset$korean)

 

(5) as.factor()

as.factor() 함수는 데이터 유형을 팩터형으로 변환하는 함수입니다. 코드는 다음과 같습니다.

as.factor(student_dataset$name)

 

16.2. as() 함수로 데이터셋 구조 변경

더보기

예시를 위해 matrix_01 행렬을 정의하겠습니다. 

matrix_01 <- matrix(data = c(1, 2, 3, 4, 5, 6, 7, 8, 9),
                    nrow = 3,
                    byrow = TRUE)

 

(1) as.vector()

as.vector() 함수는 행렬 구조를 벡터로 변환하는 함수입니다. 코드는 다음과 같습니다.

as.vector(matrix_01)

 

(2) as.matrix()

as.matrix() 함수는 다른 데이터 구조를 행렬로 변환하는 함수입니다. 코드는 다음과 같습니다.

as.matrix(student_dataset)

출력 결과를 보면, 모든 값들이 문자형으로 변환되었습니다. 행렬의 특성상 모든 값들이 같은 유형으로 이뤄줘야하고, 문자형이 변환 순서상 최상위이기 때문입니다. 

 

(3) as.data.frame()

as.data.frame() 함수는 다른 데이터 구조를 데이터프레임으로 변환하는 함수입니다. 코드는 다음과 같습니다.

as.data.frame(matrix_01)

 

(4) as.array()

as.array() 함수는 다른 데이터 구조를 배열로 차원을 추가해 변환하는 함수입니다. 다만 차원을 변경할 수는 없으므로 as.array() 함수보다는 array() 함수를 통해 차원을 변경하는 것이 좋습니다. 코드는 다음과 같습니다. 

as.array(matrix_01)

 

(5) as.list()

as.list() 함수는 다른 데이터 구조를 리스트로 변환하는 함수입니다.

as.list(student_dataset)

출력 결과를 살펴보면, 데이터프레임과는 다르게 테이블 구조보다는 각 벡터의 결합 구조로 형성했음을 확인할 수 있습니다.

 

16.3. 출력과 할당에 대한 논의

더보기

위의 코드를 실습하면 student_dataset의 데이터 유형이 변환되지 않은걸 확인할 수 있습니다. 이는 변환된 값을 출력만 했을뿐 실제로는 결과를 객체에 할당하지 않았기 때문인데, student_dataset 객체의 korean 컬럼의 유형을 변환하고자 한다면 아래와 같이 코드를 작성해야 합니다.

student_dataset$korean <- as.character(student_dataset$korean)