본문 바로가기
게임 제작 관련/개발환경(프로그램)

R 시작하기3 - list, Factor, 데이터 타입 바꾸기(casting)

by 김바보 2022. 10. 5.

Environment 창 모두 지우기 = rm(list=ls())

특정 변수 지우기 = rm(변수)

 

 

1. List

list는 여러 객체를 하나로 묶은 것이다. type에 제약이 있던 matrix, dataframe과 달리 list는 객체를 여러개 묶은 상위 거대 객체이다.

j = list(names='Joe', salary = 55000, union = TRUE)
----------------------------------------------------
j$names
[1] "Joe"		-> character vector(문자형 벡터)

$salary
[1] 55000		-> numeric vector(수치형 벡터)

$union
[1] TRUE		-> logical vector(논리형 벡터)

 

 

1-1. List안의 서브객체 다루기

불러오기

j$salary        #일반적인 형태
j[["salary"]]   #이렇게 쓰기도 한다
j[[2]]          #(순서!) 2번째 객체 가져오기

 

추가 & 수정

j$history = 1:10   #j에 새로운거 추가(맨뒤로 간다)
j[[1]] = "Yoon"    #첫번째 객체 Joe -> Yoon으로 수정하기

 

 

 

2. Factor

Factor은 나뉘어질 수 있는 원소가 한정 되어있을 때 사용하는 벡터다. (ex 성별, 분반)

범주형, 이산형 자료라고 생각하면 된다.

fac1 = c(5, 10, 15, 10)
fac2 = factor(fac1)
-----------------------
> fac2
[1] 5  15 10 15
Levels: 5 10 15

factor(fac1)을 통해 범주형으로 바뀌었다 -> Levels: 5, 10, 15

이때 Levels의 형태는 문자열이다 -> "5" "10" "15"

 

 

 

 

3. Casting 하기 전에 데이터 구조 총정리

Vector: 1차원 데이터 / 같은 타입

Factor: 1차원 데이터 / 범주형

Matrix: 2차원 데이터 / 같은 타입

Array: 2차원 이상 데이터 / 같은 타입

Dataframe: 2차원 데이터 / col별로 다른 타입 가능

List: 2차원 이상 데이터 / 다른 타입 가능

 

 

4. Casting(데이터 타입 바꾸기)

Casting = 데이터 타입 변환

double = 실수

 

 

 

4-1. drop = FALSE로 타입 변환 하지 않기

a = matrix(1:10, 5, 2)
b = a[,-1]           # (-) 의미 = 1열을 없앤다
-----------
> b
[1]  6  7  8  9 10
-----------
> class(b)
[1] "integer"

matrix였던 a에 1열을 없앤 b는 2차원 구조가 아니므로 matrix형태를 유지할 수 없다.

그렇기에 class(b)를 하면 integer(정수형)이 나온다.

 

b = a[,-1, drop = FALSE]
---------------------------
> class(b)
[1] "matrix" "array"

똑같은 상황에서 drop = FALSE를 사용하면 class(타입)가 유지되는 것을 볼 수 있다.

 

 

 

4-2. Vector(numeric) <-> 문자형(character)

int1 = 1:4

chr = as.character(int1)
> chr1
[1] "1" "2" "3" "4"
---------------------------
num1 = as.numeric(chr1)
> num1
[1] 1 2 3 4

int1에 1, 2, 3, 4가 있는 vector를 받았다.

이 vector를 as.character(변수, 바꿔주려는 것) 해주면 문자형이 된다.

똑같이 chr1에 있는 문자형을 as.numeric(변수) 해주면 vector가 된다.

 

아래로 설명하는 것들도 다 이렇게 해주면 된다.

 

 

 

4-2. Matrix <-> Vector

Matrix -> Vector  = c( )

Vector -> Matrix  = as.matrix( )

 

4-3. Vector -> Factor(범주형) / Factor <-> Vector(integer)

Vector -> Factor = as.factor( )

Factor -> Vector = as.numeric(= as.double( )) , as.integer

 

4-4. List or Dataframe <-> Vector

List or dataframe -> Vector = unlist( )

Vector      ->       dataframe = as.data.frame( )

Vector           ->              list = as.list( )

 

4-5. Dataframe <-> List

Dataframe -> List = unclass( ), as.list( )           #무슨 차이인지 잘 모르겠다

List -> Dataframe = as.data.frame( )

 

댓글