도구들/R,파이썬

R 데이터 구조(벡터, 행렬, 배열, 데이터 프레임, 리스트)

cactus 2019. 3. 18. 17:53


1. 벡터(vector)


벡터 데이터 구조는 숫자, 문자 등 원소들의 집합으로 이루어진 배열이다. 동일한 자료형의 값이 여러 개 연속되어 있다.

가장 단순한 R 데이터 구조로, 원소가 숫자면 숫자 벡터, 문자면 문자 벡터가 된다. 원소 중 문자가 하나라도 있을 경우엔 문자 벡터가 된다.

명령어 "c"를 이용해 선언된다.


- c(원소1, 원소2, 원소3...)


a <- c(1,2,3)

b <- c("a","b","c")

c <- c(TRUE,FALSE,TRUE)

d <- c(1,2,"a","b")


이 경우 a는 숫자 1, 2, 3으로 이루어진 숫자 벡터, b는 문자 a, b, c로 이루어진 문자 벡터, c는 논리연산자로 이루어진 벡터이다.

d 벡터의 경우 숫자와 문자가 섞여 있으므로 문자벡터로 모든 원소가 문자로 인식된다.


> d

[1] "1" "2" "a" "b"


d 변수의 출력화면에 모두 문자로 인식됨을 확인할 수 있다.



2. 행렬(matrix)


벡터는 원소들의 집합인 1차원이지만, 행렬은 행렬은 행과 열로 이루어진 2차원의 데이터 형태이다. 명령어 matrix를 통해 선언된다.

* 데이터 프레임 또한 2차원 형태의 데이터 구조로, 행렬은 모든 데이터 유형이 동일해야 하나 데이터 프레임은 서로 다른 유형의 데이터가 저장될 수 있다.


- matrix(행렬에 들어가는 데이터들을 묶어놓은 벡터c(~,~), ncol=열의 수, nrow=행의 수)


아래와 같이 a라는 변수에 원소가 1부터 6까지인 벡터를 열의 갯수가 3개인 행렬로 생성하였다. (2*3 행렬 생성)


> a <- matrix(c(1,2,3,4,5,6), ncol=3)

> a

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

[1,]    1    3    5

[2,]    2    4    6


행렬의 데이터는 열부터 채워지는데, 행부터 채우고자 하는 경우 byrow=T 옵션을 추가한다.


> a <- matrix(c(1,2,3,4,5,6), ncol=3, byrow=T)

> a

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

[1,]    1    2    3

[2,]    4    5    6


기존에 생성되어 있는 벡터를 결합하여 행렬을 생성할 수 있다 : 행방향 결합 rbind, 열방향 결합 cbind 함수


- rbind(결합하고자 하는 벡터1, 벡터2) -> 벡터 1, 2가 1행, 2행이 됨

- cbind(결합하고자 하는 벡터1, 벡터2) -> 벡터 1, 2가 1열, 2열이 됨


> a <- c(1,2,3)

> b <- c(10,20,30)

> rbind(a,b)

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

a    1    2    3

b   10   20   30

> cbind(a,b)

     a  b

[1,] 1 10

[2,] 2 20

[3,] 3 30



3. 배열(array)


배열은 2차원 데이터 구조를 쌓아 올린 형태로, 행렬 형태의 데이터를 층위별로 저장한다.


- array(배열에 들어가는 데이터 벡터c(~~~), dim=c(행수,열수,층수))


> array(c(1,2,3,4,5,6),dim = c(3,2,2))

, , 1


     [,1] [,2]

[1,]    1    4

[2,]    2    5

[3,]    3    6


, , 2


     [,1] [,2]

[1,]    1    4

[2,]    2    5

[3,]    3    6



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


명령어 data.frame으로 생성되며 행렬과는 다르게 각 열이 서로 다른 데이터 타입을 가질 수 있으나 각 열의 데이터 타입은 동일해야 한다.

데이터 프레임이 생성된 뒤에는 행렬과 동일하게 다룰 수 있다.


- data.frame(벡터1, 벡터2,...)


> a <- c(1,2,3)

> b <- c("apple","orange","banana")

> data.frame(a,b)

  a      b

1 1  apple

2 2 orange

3 3 banana


숫자벡터 a, 문자벡터 c로 구성된 데이터 프레임이 생성된 것을 확인할 수 있다.



5. 리스트(list)


벡터와 비슷하나 벡터와 달리 여러 자료형의 데이터를 섞어서 저장할 수 있다.(벡터나 data frame 등도 원소로 저장 가능)


> a <- c(1,2,3)

> b <- c("apple","orange","banana")

> list(100,a,b,"lee","kim")

[[1]]

[1] 100


[[2]]

[1] 1 2 3


[[3]]

[1] "apple"  "orange" "banana"


[[4]]

[1] "lee"


[[5]]

[1] "kim"


반응형