본문 바로가기
R/Data Type

R 자료형/자료구조 - 판별과 변환

by 통계열등생 2020. 10. 26.
반응형

 ◎ 자료형과 자료구조 알아보기

- mode(x) : 자료형(클래스) => 숫자형, 문자형, 논리형 ...

- typeof(x) : 자료형 => 정수형, 실수형, 문자형, 논리형 ...

- class(x) : 자료구조 => Array, List, Table ...

> x = matrix(1:9,3)
> x
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> mode(x)
[1] "numeric"
> typeof(x)
[1] "integer"
> class(x)
[1] "matrix" "array" 

 

 

 ◎ 데이터 유형 판별

<자료형 판별 함수>

is.numeric(x)  객체 x가 수치형인가
is.integer(x)  객체 x가 정수형인가
is.double(x)  객체 x가 실수형인가
is.complex(x)  객체 x가 복소수형인가
is.character(x)  객체 x가 문자형인가
is.logical(x)  객체 x가 논리형인가
is.factor(x)  객체 x가 범주형인가
is.function(x) 객체 x가 함수인가
is.na(x) 객체 x가 결측치인가
is.null(x) 객체 x가 미정의 값인가
> x = factor(c('m','f'))
> is.factor(x)
[1] TRUE
> x = NA
> is.null(x)
[1] FALSE
> x = is.null(x)
> is.logical(x)
[1] TRUE

 

 

 ◎ 데이터 구조 판별

<자료구조 판별 함수>

is.vector(x)  객체 x가 벡터인가
is.list(x)  객체 x가 리스트인가
is.matrix(x)  객체 x가 행렬인가
is.array(x) 객체 x가 배열인가
is.data.frame(x)  객체 x가 데이터프레임인가

 

 

 ◎ 데이터 유형 변환

<자료형 변환 함수>

as.numeric(x)  객체 x를 수치형으로 변환
as.integer(x)  객체 x를 정수형으로 변환
as.double(x)  객체 x를 실수형으로 변환
as.complex(x)  객체 x를 복소수형으로 변환
as.character(x)  객체 x를 문자형으로 변환
as.logical(x)  객체 x를 논리형으로 변환
as.factor(x)  객체 x를 범주형으로 변환
> x = c('A','B','C')
> mode(x)
[1] "character"
> x = as.factor(x)
> x
[1] A B C
Levels: A B C
> mode(x)
[1] "numeric"
> class(x)
[1] "factor"
>
> print(x)
[1] A B C
Levels: A B C
> cat(x)
1 2 3

문자형을 요인형으로 바꾸면 보기에는 A B C 로 문자같지만 mode() 함수로 자료형을 출력하면 숫자형으로 나온다.

print() 함수로 출력했을 때는 문자형으로 보이지만 cat() 함수로 출력하면 숫자형인 것을 알 수 있다.

 

 

 ◎ 데이터 구조 변환

<자료구조 변환 함수>

as.vector(x)  객체 x를 벡터로 변환
as.list(x)  객체 x를 리스트로 변환
as.matrix(x)  객체 x를 행렬로 변환
as.array(x) 객체 x를 배열로 변환
as.data.frame(x)  객체 x를 데이터프레임으로 변환

 

 

  • 벡터 변환

> 리스트

> x = 1:3
> as.list(x)
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

> list(x)
[[1]]
[1] 1 2 3

> 행렬

> x = 1:6
> as.matrix(x)
     [,1]
[1,]    1
[2,]    2
[3,]    3
[4,]    4
[5,]    5
[6,]    6
> matrix(x,2,3)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> dim(x) = c(2,3)
> x
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

> 배열

> x = 1:6
> as.array(x)
[1] 1 2 3 4 5 6
> array(x,c(2,3,1))
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

> dim(x) = c(2,3,1)
> x
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

> 데이터프레임

> x = 1:6
> as.data.frame(x) 
  x
1 1
2 2
3 3
4 4
5 5
6 6

 

 

  • 리스트 변환

리스트는 어떠한 자료구조로 변환을 시도하면 벡터를 제외하면 변환이 되지만 자료가 이상하게 변환된 것을 알 수 있다.

> 벡터

> x = list(3, c(1, 3, 5), "Korea")
> as.vector(x) 
[[1]]
[1] 3

[[2]]
[1] 1 3 5

[[3]]
[1] "Korea"

> class(as.vector(x))
[1] "list"
>
> y = list(c(3, 4, 5))
> as.vector(y) 
[[1]]
[1] 3 4 5

> class(as.vector(y))
[1] "list"

> 행렬

> as.matrix(x) 
     [,1]     
[1,] 3        
[2,] Numeric,3
[3,] "Korea"  
> class(as.matrix(x))
[1] "matrix" "array" 
> as.matrix(y) 
     [,1]     
[1,] Numeric,3
> class(as.matrix(y))
[1] "matrix" "array" 

> 배열

> as.array(x)
[[1]]
[1] 3

[[2]]
[1] 1 3 5

[[3]]
[1] "Korea"

> class(as.array(x))
[1] "array"
> as.array(y)
[[1]]
[1] 3 4 5

> class(as.array(y))
[1] "array"

> 데이터프레임

> as.data.frame(x) 
  X3 c.1..3..5. X.Korea.
1  3          1    Korea
2  3          3    Korea
3  3          5    Korea
> class(as.data.frame(x))
[1] "data.frame"
> as.data.frame(y) 
  c.3..4..5.
1          3
2          4
3          5
> class(as.data.frame(y))
[1] "data.frame"

 

 

  • 행렬 변환

> 벡터

> x = matrix(1:6,2)
> as.vector(x) 
[1] 1 2 3 4 5 6
> c(x)
[1] 1 2 3 4 5 6
> dim(x) = dim(1); x
[1] 1 2 3 4 5 6

> 리스트

> x = matrix(1:2,2)
> as.list(x) 
[[1]]
[1] 1

[[2]]
[1] 2

> 배열

as.array() 함수로 변환하면 그대로 행렬이지만 dim() 함수로 차원을 조정해주면 array객체로 제대로 변환할 수 있다.

> x = matrix(1:6,2)
> as.array(x)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> class(as.array(x))
[1] "matrix" "array" 
> dim(x) = c(1,3,2); x
, , 1

     [,1] [,2] [,3]
[1,]    1    2    3

, , 2

     [,1] [,2] [,3]
[1,]    4    5    6

> class(x)
[1] "array"

> 데이터프레임

> x = matrix(1:6,2)
> as.data.frame(x) 
  V1 V2 V3
1  1  3  5
2  2  4  6

 

 

  • 배열 변환

> 벡터

> x = array(1:6,c(1,3,2))
> as.vector(x) 
[1] 1 2 3 4 5 6

> 리스트

> as.list(x) 
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] 4

[[5]]
[1] 5

[[6]]
[1] 6

> 행렬

> as.matrix(x) 
     [,1]
[1,]    1
[2,]    2
[3,]    3
[4,]    4
[5,]    5
[6,]    6

> 데이터프레임

> as.data.frame(x) 
  V1 V2 V3 V4 V5 V6
1  1  2  3  4  5  6

 

 

  • 데이터프레임 변환

> 벡터

> x = data.frame(a=c(1,2,3),b=c('a','b','c'))
> as.vector(x) 
  a b
1 1 a
2 2 b
3 3 c
> class(as.vector(x))
[1] "data.frame"

> 리스트

> as.list(x) 
$a
[1] 1 2 3

$b
[1] "a" "b" "c"

> 행렬

데이터프레임을 행렬로 변환하면 자료형이 통일된다.

> as.matrix(x) 
     a   b  
[1,] "1" "a"
[2,] "2" "b"
[3,] "3" "c"
> class(as.matrix(x))
[1] "matrix" "array" 

> 배열

데이터프레임을 배열로 변환하면 에러가 발생한다.

> as.array(x)
Error in `dimnames<-.data.frame`(`*tmp*`, value = list(n)) : 
  데이터프레임에 잘못된 'dimnames'이 주어졌습니다

 

 

 

 

 

<R 자료형/자료구조 - 판별과 변환>

반응형

댓글