포스트

[R] 데이터 구조

datatype data_type

1. 스칼라(Scala)

구성인자가 하나인 벡터

1
v0 <-  c(1);v0
1
2
>v0
[1] 1

2. 벡터(vector)

1차원 배열개념
동일 유형의 단일형 데이터(문자/숫자/논리)

num

1
2
v1 <-  c(1,2,3);v1
class(v1)
1
2
3
>v1
[1] 1 2 3
[1] "numeric"

char

1
2
v2 <-  c(1,2,3,"asd");v2  # 숫자 유형이 문자로 바뀜
class(v2)
1
2
3
>v2
[1] "1"      "2"      "3"      "asd"
[1] "character"

named vector

벡터값에 이름 부여 가능

1
v3 <-  c(n=1,m=2,a=3);v3
1
2
3
>v3
n m a 
1 2 3 

3. 팩터(Factor)

범주형 데이터를 표현하기 위한 데이터 타입

nominal(명목명) : 크기 비교 불가 (ex 책상, 의자)

1
2
furniture <- factor(c("desk","chair","home"), c("desk","chair")); furniture
                       # 표현하고자 하는 값        # 범주
1
2
3
> furniture
[1] desk  chair <NA>        # <NA>: 범주를 벗어난 값
Levels: desk chair

ordinal(순서형) : 순서 비교 가능 (ex 대, 중, 소)

1
2
3
4
size <- factor("중", c("소","중","대"), 
               ordered = TRUE, levels = c("대","중","소")); size
                 # 순서형으로     # 순서 
size <- ordered("중", c("대","중","소"))
1
2
3
> size
[1] 중
Levels: 소 < 중 < 대

팩터 함수

1
2
3
4
5
6
levels(size)      # factor 변수 level 확인
levels(size)[2]   # factor 변수 [n]번째 level 확인

levels(size) <- c("큼","중간","작음")  # level 수정   *덮어씀

nlevels(size)     # 중복을 제거한 팩터의 level 개수

4. 리스트(list)

다차원 표현(1차원 벡터 응용)
다중형 데이터 #가장 복잡한 데이터 유형
여러 객체들의 모음(벡터, 행렬, 배열, 데이터프레임, 리스트 등)
Key와 value로 구성된 해시맵(hashmap)

list형태
keyvalue
keyvalue
keyvalue

list 초기화

1
2
3
4
5
6
7
8
9
list1 <- list(key="value"
              element = "item")  # list1 값 덮어씀
list1          # 모든 키에 대한 모든 값 조회

# 벡터로 list 생성
list3 <- c('vec', '02)345-6958', 4000)
            # 벡터는 타입이 같아야하므로 4000도 문자로 저장됨
names(list3) <- c('a', 'b', 'c')  # 이름 지정 필요
         
1
2
3
4
5
6
>list1
$key
[1] "value"

$element
[1] "item"

list 조회

1
2
3
4
5
6
7
8
list1[1]           # 첫번째 리스트 조회
class(xx3[1])      

list1[[1]]         # 첫번째 리스트의 값 조회
class(list1[[1]])  

list1$name         # 특정 키에 대한 값 조회
class(list1$name)  
1
2
3
4
5
6
7
8
9
> list1[1]
$name
[1] "value"   # list

> list1[[1]]
[1] "value"   # character

> list1$key
[1] "value"   # character

list 추가

1
list2 <- c(list1, list(="값")); list2
1
2
3
4
5
6
7
8
9
>list2
$key
[1] "value"

$element
[1] "item"

$[1] "값"

list 삭제

list key 삭제

1
list2$ <- NULL  # 값도 삭제됨

list value 삭제

1
list2$[length(list2$)] <- NA 

5. 행렬(Matrix)

2차원 배열개념, 단일형 데이터 (문자/숫자/논리)
행렬 간의 사칙연산 등의 목적으로 사용

1
2
mat1 <- matrix(1:12, nrow = 3)  # byrow=T 행부터 채워짐
mat1
1
2
3
4
5
> mat1                            # byrow=T
     [,1] [,2] [,3] [,4]          #      [,1] [,2] [,3] [,4]
[1,]    1    4    7   10          # [1,]    1    2    3    4
[2,]    2    5    8   11          # [2,]    5    6    7    8
[3,]    3    6    9   12          # [3,]    9   10   11   12

행렬 이름

1
2
3
dimnames(mat1) <- list(c(1,2,3), c('a','b','c','d'))  # 행, 열 이름 변경
rownames(mat1) <- c(1,2,3)                            # 행 이름 변경
colnames(mat1) <- c('a','b','c','d')                  # 열 이름 변경
1
2
3
4
      [a]  [b]  [c]  [d]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

행렬 인덱싱

1
2
3
4
5
6
mat1[2,3]      # 2행 3열
mat1[2,]       # 2행 전부
mat1[,-3]      # 3열 제외
mat1[,2:4]     # 2~4열
mat1[,c(1,3)]  # 1,3열
mat1[2,c('b','c')]  # 열이름 b, c인 열

행렬 함수

1
2
t(mat1)  # 행과 열 교환
dim(mat1) <- c(2,6)  # 2행 6열로 변환

6. 배열(Array)

다차원 단일형 데이터 (문자/숫자/논리)

1
2
arr1 <- array(1:24, c(3,4,2))  #(행,열,층)
arr1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
> arr1
, , 1                      # 1층

     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

, , 2                      # 2층

     [,1] [,2] [,3] [,4]
[1,]   13   16   19   22
[2,]   14   17   20   23
[3,]   15   18   21   24

인덱싱 방법은 배열에 인자 하나 더 추가

7. 데이터 프레임(Data Frame)

2차원 다중형 데이터
R에서 대부분의 함수가 사용

1
head(iris)
1
2
3
4
5
6
7
8
> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.