/ R

R 기초강의(7) - R 자료구조(factor, list)

R 강좌는 여러 절로 구성되어 있습니다.


R factor

R에서의 factor는 범주형 데이터를 표현하기 위한 데이터 형태입니다. 범주형 자료로 표현되면 집단별로 통계분석과 같은 작업을 수행할 수 있습니다.

부연설명하자면, 범주형 데이터란 데이터가 사전에 정의된 특정 유형으로만 분류되는 경우를 의미합니다. 방의 크기를 “대”, “중”, “소”로 나누어 표현하고 있을 때 특정 방의 크기를 “대” 라고 명시한다면 이는 범주형 데이터 입니다. 그리고 범주형 변수가 담을 수 있는 값의 목록(“대”, “중”, “소”)을 level이라고 합니다.

의미를 잘 생각해보면 factor는 저장할 값 뿐만 아니라 값의 level도 명시해야 합니다. 범주형 데이터는 또 다시 명목형과 순서형이 있습니다. 명목형은 값들 크기 비교가 불가능한 경우를 의미하고(좌파,우파) 순서형 데이터는 순서를 둘 수 있는 경우를 의미합니다.(대, 중, 소)

factor()의 특징

  • 입력 인자는 일반적으로 vector를 사용합니다.
  • levels : 그룹으로 지정할 문자형 vector를 지정합니다. 만약 사용하지 않으면 오름차순으로 데이터를 자체적으로 그룹지정 합니다.
  • ordered : TRUE면 순서형, FALSE면 명목형 데이터를 뜻합니다. 기본값은 FALSE입니다. level에 지정한 순서대로 값의 크기가 정해집니다.

실습

  • 6명의 혈액형 데이터를 vector에 저장하고 vector를 factor로 변환, 확인하는 코드를 작성해보자.
# factor 생성

var1 = c("A", "O", "AB", "B", "A", "O", "A")
var1

var1_factor = factor(var1)

var1_factor                   # factor이기 때문에 
                              # data와 level이 같이 출력

nlevels(var1_factor)          # factor의 level개수
                              # 4 

levels(var1_factor)           # factor의 level 목록
                              # "A"  "AB"  "B"  "O"

is.factor(var1_factor)        # factor인지를 판단

ordered(var1)                 # 순서형 factor 생성

# level과 order 지정
# level에 지정이 안되면 NA로 처리
var1_factor = factor(var1, 
                     levels = c("O","A","B"), 
                     ordered = T)
var1_factor


var1_factor = factor(var1, 
                     levels = c("O","A","B","AB"), 
                     ordered = T)
var1_factor

levels(var1_factor) = c("A형","AB형","B형","O형")
levels(var1_factor)           

var1_factor                  # 결과를 꼭 확인해보자

실습

  • 남성과 여성의 데이터로 factor를 생성한 후 빈도수에 대한 chart를 그려보자
# 남성과 여성의 데이터르 factor 생성 후 chart 그리기

gender = c("MAN", "WOMAN", "MAN", "MAN", "WOMAN")
gender

factor_gender = as.factor(gender)
factor_gender

table(factor_gender)     # 빈도수 구하기

plot(factor_gender)      # 빈도수로 막대그래프 생성

R list

list는 일반적으로 통계분석의 결과를 저장할 때 많이 사용하는 데이터 형태입니다. list의 원소로 scalar, vector, matrix, array, data frame, factor, 또 다른 list를 가질 수 있습니다.

list는 vector와 유사한 선형 자료구조입니다. list 하나의 메모리 영역에는 key와 value가 한 쌍으로 저장됩니다. Python의 dict와 유사한 자료구조라고 생각하시면 됩니다. 단, list는 dict와는 다르게 순서가 존재합니다.

실습

  • 지금까지 배운 자료구조들을 list안에 저장해보자.
# list 

var_scalar = 100                            # scalar
var_scalar

var_vector = c(10,20,30)                    # vector
var_vector

var_matrix = matrix(1:4,nrow = 2,ncol = 2)  # matrix
var_matrix

var_array = array(1:8, dim=c(2,2,2))        # array
var_array

var_df = data.frame(id=1:3, age=c(10,15,20)) # data frame
var_df

var_factor = factor(c("A","B","C","A","B","A")) # factor
var_factor

my_list = list(var_scalar,
               var_vector,
               var_matrix,
               var_array,
               var_df,
               var_factor)
my_list

위의 예에서 처럼 list() 함수를 이용하여 list를 생성합니다. list에 저장된 데이터를 출력하면 [[n]][n] 형식으로 출력되는데 [[n]]은 리스트를 구성하는 하나의 원소에서 key에 해당하고 [n]은 value에 해당합니다.

# list 생성

myList <- list("Hong","길동",20)
myList

# list 자료구조를 vector 자료구조로 변환
myVector = unlist(myList)
myVector

# key와 value형식으로 list 생성
member = list(name=c("홍길동","김길동"),
              age=c(20,30),
              address=c("서울","수원"),
              gender=c("남자","여자"))
member

# list에서 key는 $를 이용해서 표시

member$age                    # 20 30

member$age[1]                 # 20

member[[1]]                   # "홍길동" "김길동"

member[["name"]]              # "홍길동" "김길동"
member$name                   # "홍길동" "김길동"

member[2:3]

End.


이 포스트의 내용은 아래의 책과 사이트를 참조했습니다. 조금 더 자세한 사항을 알고 싶으시면 책을 참조하거나 해당 사이트를 방문하세요!!