본문 바로가기
## 오래된 게시글 (미관리) ##/R

30. (NEW) 데이터 구조와 데이터 프레임

by #Glacier 2018. 11. 21.
반응형

오늘은 데이터 구조와 데이터 프레임에 대해 알아보고자 합니다.


1. 벡터 (Vector)


데이터 분석의 가장 기본적인 데이터 구조는 벡터입니다. 여기서, 벡터는 여러 개의 원소를 가지는 하나의 변수입니다.

R에서는 외부 데이터 Set이나 큰 데이터를 불러올 때 데이터프레임 구조로 불러와 분석을 실행하게 됩니다.

벡터의 특징은,

 1) 동질적이다 - 한 벡터의 모든 원소는 같은 자료형 또는 같은 모드(mode)를 가집니다.

 2) 벡터는 위치로 인덱스 된다 - V[2]는 V벡터의 2번째 원소입니다.

 3) 벡터는 인덱스를 통해 여러 개의 원소로 구성된 하위 벡터를 반환할 수 있다 

   - V[c(2,3)]은 v벡터의 2, 3번째 원소로 구성된 하위벡터입니다.

 4) 벡터 원소들은 이름을 가질 수 있다 -

 V<-c(10,20,30); names(v) <-c("A","B","C")

 V["B"]

 B

 20

 이렇게 가능합니다.


2. 리스트(Lists)

 1) 리스트는 이질적이다 - 여러 자료형의 원소들이 포함될 수 있다.

 2) 리스트는 위치로 인덱스 된다 - L[[2]]는 L리스트의 2번째 원소이다.

 3) 리스트에서 하위 리스트를 추출할 수 있다 - L[c(2,3)]은 v벡터의 2번째, 3번째 원소로 구성된 하위벡터이다.

 4) 벡터 원소들은 이름을 가질 수 있다. (위와 동일)


 3. R에서의 자료 형태 (mode)


 객체

예시

모드 

 숫자

3.1415 

수치형(Numeric) 

 숫자 벡터

c(2,3,4,5.5)

수치형(Numeric) 

 문자열

"Tom" 

문자형(Character)

 문자열 벡터

c("Ace","Rubby","Boss") 

문자형(Character)

 요인

factor(c("A","B","C") 

수치형(Numeric) 

 리스트

list("Ace", "Rubby", "Boss") 

리스트(List)

 데이터프레임

data.frame(x=1:3, y=c("Ace","Rubby","Boss")) 

리스트(List)

 함수

print 

함수(Function)


4. 데이터 프레임 (data frames)


데이터프레임은 강력하고 유연한 구조로, SAS의 데이터셋을 모방해서 만들어집니다.

특징은,

 1) 데이터 프레임의 리스트 원소는 Vector 혹은 Factor이다.

 2) Vector와 Factor는 데이터 프레임의 열이다.

 3) Vector와 Factor들은 동일한 길이이다.

 4) 동일한 Vector와 Factor들은 데이터 프레임을 사각으로 만든다.

 5) 열에는 이름이 있어야 한다.


5. 그 밖의 데이터 구조들


 5-1  - 단일값 (Scalars)

 -R에서는 원소가 하나인 벡터로 인식 / 처리

 pi

 [1] 3.1415

 length(pi)

 [1] 1


 5-2 - 행렬 (Matrix)

 -R에서는 차원을 가진 벡터로 인식

 a<-1:9

 dim(a) <-c(3,3) # 3X3의 행렬로 만드는 작업

 a

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

 [1,]   1     4     7

 [2,]  2     5    8

 [3,]  3     6    9

  #이렇게 됩니다. 여기서 볼 점은 1,2,3,4,5,6,7,8,9가 순서대로 행부터 입력이 아닌, 열부터 입력되는 점입니다.


 5-3 - 배열 (Arrays)

 - 행렬에 3차원 또는 n차원까지 확장된 형태

 - 주어진 벡터에 더 많은 차원을 부여하여 배열을 생성

 b<-1:12

 dim(b) <-c(2,3,2)

 # 하지만 보여질 때는 차원이 다 보여지진 않습니다.. 표현의 한계!


 5-4 - 요인 (Factors)


 - 벡터처럼 생겼지만, R에서는 벡터에 있는 고유값(Unique value)의 정보를 얻어내는데, 

   이 고유값들을 요인의 수준 (level)이라고 한다.


 - 요인의 두 가지 주된 사용처 (범주형 변수, 집단 분류)


6. 벡터, 리스트, 행렬 다루기


 - 행렬(Matrix)는 R에서 차원을 가진 벡터이며, 텍스트마이닝과 소셜 네트워크 분석 등에 활용된다.

 - 재활용 규칙(Recycling Rule)


 a<-seq(1,6)

b<-seq(7,9) 

a+b 

cbind(a,b) 

1

1   7 

2

8

10

2  8  

3

9

12 

3  9

4

 

11 

4  7 

5

 

13 

5  8 

6

 

15 

6  9 


 # 위와 같이 a+b를 할 경우, a는 6개, b는 3개의 원소를 가지고 있습니다. 따라서 길이가 맞지 않을 때에는,

   다시 b의 처음부터 더하게 됩니다.

 # 또, cbind로 열병합을 할 경우도 마찬가지로 b 원소의 처음부터 다시 병합되게 됩니다. 이 점을 유의해야 합니다.


--이 밖의 기능--


● 벡터에 데이터 추가


v<-c(v, newItems)

v[length(v)+1]<-newItem


● 벡터에 데이터 삽입


append(vec, newvalues, after=n)


● 요인 생성


f<-factor(v), v:문자열 또는 정수 벡터

f<-factor(v, levels)


●여러 벡터를 합쳐 하나의 벡터와 요인으로 만들기


comb<-stack(list(v1=v1, v2=v2, v3=v3))


●벡터 내 값 조회


벡터[c(1,3,5,7)] #벡터 내 1,3,5,7번 째 값 조회

벡터[-c(2,4)] #벡터 내 2,4번 째 값을 제외하고 조회


●리스트

list(숫자, 문자, 함수) #list 함수의 인자로는 숫자, 문자, 함수가 포함.


●리스트 생성하기


L<-list(x,y,z)

L<-list(valuename1 = data, valuename2  = data, valuename3 = data)

L<-list(valuename1= vec, valuename2 = vec, valuename3 = vec)


●리스트 원소 선택


L[[n]] : n번 째 원소

L[c(n1, n2, n3)] : 목록


●이름으로 리스트 원소 선택


L[["name"]],

L$name


●리스트에서 원소 제거


L[["name"]]<-NULL


●NULL 원소를 리스트에서 제거


L[sapply(L,is.null)] <-NULL,

L[L==0]<-NULL,

L[is.na(L)]<-NULL


●행렬


matrix(data, 행수, 열수),

a<-matrix(data,2,3), d<-matrix(0,4,5)

e<-matrix(1:20, 4,5)


●차원


dim(행렬), dim(a)


●대각(diagonal)


diag(행렬), diag(b)


●전치(transpose)


t(행렬), t(a)


●역


solve(matrix)


●행렬의 곱


행렬%*%t(행렬), a%*%t(a)


●행 이름 부여


rownames(a)<-c("행이름1", "행이름2", "행이름3")


●열 이름 부여


colnames(a)<-c("열이름1", "열이름2")


●행렬의 연산


f+f, f-f, f+1, f-1


●행렬의 연산


f%*%f, f*3


●행렬에서 행, 열 선택하기


vec<-mtrx[1,]

vec<-mtrx[,3]


#오늘은 여기까지 알아봤는데요 ! 뭐 항상 쉽게 와닿지는 않는 것 같아요. ^^ 

  많이 해보는게 답인거 같습니다.



반응형