티스토리 뷰

R

R의 데이터 구조

코린이도이 2021. 6. 4. 16:35

R의 데이터 구조

R은 통계 데이터 분석용으로 널리 사용되는 프로그래밍 언어이며, 기계학습에서 많이 사용하는 R 데이터 구조는 벡터(vector), 팩터(factor), 리스트(list), 어레이(array), 데이터 프레임(data frame)이 있다.

 

벡터(vector)

기본 R 데이터 구조는 벡터이다. 벡터는 원소(element)라고 불리는 값의 순서 있는 집합(ordered set)으로 저장한다. 벡터는 원소의 개수를 상관하지 않지만 모든 원소는 같은 타입이어야 한다. 예를 들면 벡터는 숫자와 문자를 둘 다 포함하지 못한다.

 

데이터 타입

- 정수(interger)

- 소수점이 있는 수(numeric)

- 텍스트(character)

- 논리 값(logical): TRUE 또는 FALSE

- NULL 값

- 결측치(missing): NA

 

벡터 만들기: c()함수 이용하기

#문자 벡터 만들기
names<-c("Emily","joey","ellen")

#숫자 벡터 만들기
score<-c(13, 25, 36)

#논리 값 벡터 만들기
flu_state<-c(FALSE,TRUE,TRUE)

R 벡터 원소 추출하기

#names벡터 안의 첫번째 원소를 출력
names[1]

#names벡터 안의 첫번째부터 세번째 원소 출력
names[1:3]

 

팩터(factor)

명목형 데이터를 저장하기 위해 R은 팩터라는 데이터 구조를 제공한다. 즉, 팩터(factor)는 명목형 변수를 대표하기 위해 홀로 사용되는 특별한 용도의 벡터다. *명목형: 값의 범주와 특성을 나타내는 속성

 

문자 벡터를 사용하지 않는 이유

팩터가 문자 벡터보다 일반적으로 더 효율적이기 때문이다. 즉, MALE, FEMALE, FEMALE을 저장하기보다 컴퓨터는 1,2,2로 저장할 수 있기에 메모리를 절약할 수 있다.

#1 factor 예시
gender<-factor(c("MALE","FEMALE","FEMALE"))

#gender 데이터 불러오기
gender
#출력: MALE FEMALE FEMALE
#출력: Levels: FEMALE MALE

#gender value에 factor()함수를 적용하면 성별 팩터 레벨(level)에 대한 추가적인 정보를 출력한다.
#즉, 레벨은 데이터가 가질 수 있는 가능한 범주들로 구성된다.

#2 factor생성할 때 데이터에 나타나지 않은 레벨 추가하기
blood<-factor(c("O","AB","A"), levels=c("A","B","AB","O"))

#blood 데이터 불러오기
blood
#출력: O AB A
#출력: A B AB O

 

리스트(list)

순서가 있는 집합을 저장하는 데 사용한다. 모든 원소가 같은 타입이어야 하는 벡터와 달리, 리스트는 모아진 값의 타입이 달라도 된다.

> subject_name<-c("John","Jane","Steve")
> temperature<-c(34.5,32.6,35.1)
> flu_status<-c(FALSE,FALSE,TRUE)
> subject_name[1]
[1] "John"
> temperature[1]
[1] 34.5
> flu_status[1]
[1] FALSE

#list 생성
> subject1<-list(fullname=subject_name[1],temperature=temperature[1],flu_status=flu_status[1])
> subject1
$fullname
[1] "John"

$temperature
[1] 34.5

$flu_status
[1] FALSE

 

데이터 프레임(data frame)

데이터의 행과 열을 모두 갖고 있기 때문에 구조는 데이터베이스나 스프레드시트와 유사하다. R용어로, 데이터 프레임은 정확히 값의 수가 같은 벡터나 팩터의 리스트로 이해된다.

1차원인 벡터, 팩터, 리스트와 비교했을 때 데이터 프레임은 2차원이며, 아래와 같이 매트릭스 형태로 출력한다. 즉, 데이터 프레임은 환자 데이터의 벡터에 대해 하나의 열과 각 환자에 대해 하나의 행을 가진다.

#1 데이터 프레임 생성
> pt_data<-data.frame(subject_name,temperature,flu_status,stringAsFactors = FALSE)
> pt_data
  subject_name temperature flu_status	stringAsFactors
1         John        34.5      FALSE	FALSE
2         Jane        32.6      FALSE	FALSE
3        Steve        35.1       TRUE	FALSE
#추가 매개변수 stringAsFactors=FALSE를 명시하지 않았다면 R은 자동으로 모든 문자 벡터를 팩터로 변환한다.

#2 특정 열 출력 ➜ $이용
> pt_data$subject_name
[1] "John"  "Jane"  "Steve"

#3 특정 열 출력 ➜ 열 이름 이용
> pt_data[c("temperature","flu_status")]
  temperature flu_status
1        34.5      FALSE
2        32.6      FALSE
3        35.1       TRUE

#4 특정 행, 열 출력 ➜ 범위 이용
> pt_data[c(1,3),c(2,4)] #1행과 3행, 2열과 4열 데이터 출력
  temperature stringAsFactors
1        34.5           FALSE
3        35.1           FALSE

#5 첫 번째 열의 모든 행 출력
> pt_data[,1]
[1] "John"  "Jane"  "Steve"

#6 모두 출력
> pt_data[,]
  subject_name temperature flu_status	stringAsFactors
1         John        34.5      FALSE	FALSE
2         Jane        32.6      FALSE	FALSE
3        Steve        35.1       TRUE	FALSE

#7 특정 행,열 제외 하고 출력 ➜ -이용
> pt_data[c(-2), c(-1,-3)] #2행, 1열과 3열 제외하고 데이터 출력
  temperature stringAsFactors
1        34.5           FALSE
3        35.1           FALSE

'R' 카테고리의 다른 글

함수(function)  (0) 2021.06.06
조건제어문(if, ifelse, for, while, repeat)  (0) 2021.06.06
데이터 프레임(data frame)  (0) 2021.06.06
리스트(list)와 행렬(matrix)  (0) 2021.06.06
벡터(vector)  (0) 2021.06.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함