R/R기초

R15_ R Data Types

Codezoy 2019. 10. 23. 11:29

Goals
  • R Data Types, Vector vs Scalar, c ( ), seq ( ), factor, 
  • Nominal Factor, Ordinal Factor
  • 연산자, matrix, 이름 지정, Array, Projection, dimnames
  • list, list 좌표 입력법






  • R Data Types
vector(벡터) : 한가지 타입의 값 여러개를 저장할 수 있는 1차원 배열
1차원 배열. 인덱스 한 개.
scalar(스칼라) : 한개의 값만 갖는 벡터.

  •  c() : combine
> a<- c(1,2,10,20)
> a[1]
[1] 1

  • seq(): sequence
> b = seq(1,10,2)
> b[]
[1] 1 3 5 7 9

  • vector는 다른 타입의 값들을 저장할 수는 없음.
> c <- c("a", 1)                   # R에서는 유연성이 높은 타입으로 자동 타입 변환이 됨.
# 유연성: 문자> 숫자> 논리 타입

> d <- c(1, 2, T, F)                   # Number로 바뀌어 저장 ( T = True, F = False )


> e <- c('ONE', 1, T, F)
> e
[1] "ONE"   "1"     "TRUE"  "FALSE"




# 벡터 생성
> subject_name <- c('korean', 'english', 'math')
# 벡터에서 특정 위치(인덱스)에 있는 원소 확인
> subject_name[1]
[1] "korean"

> subject_name[1:3]
[1] "korean"  "english" "math"

> subject_name[c(1,3)]
[1] "korean" "math"  

> subject_name[c(T,T,F)]   # 1,2번 원소를 출력, 3번 원소는 출력x
[1] "korean"  "english"

  • factor(팩터): 범주형(nominal), 순위형(ordinal) 변수들을 저장하는 특별한 종류의 벡터
gender1 <- c('male', 'female', 'male')                        # factor가 아님. 단순한 문자열 벡터
gender2 <- factor(c('male','female','male'))              # factor 타입 변수, 2개의 레벨을 갖는 펙터.


  • Nominal Factor
> gender2
[1] male   female male  
Levels: female male


  • Ordinal Factor
symptoms<- factor(c('severe', 'mild', 'moderate'),
                  levels = c('mild', 'moderate', 'severe'),
                  ordered = T)

> symptoms
[1] severe   mild     moderate
Levels: mild < moderate < severe


> symptoms[1]                                         # 팩터 - 인덱스 사용 가능
[1] severe
Levels: mild < moderate < severe
> symptoms>'moderate'                         # ordinal factor인 경우 크기비교가 가능
[1]  TRUE FALSE FALSE

> gender2>'female'                                    # nominal factor는 크기 비교가 불가능
[1] NA NA NA
Warning message:
In Ops.factor(gender2, "female") :
  요인(factors)에 대하여 의미있는 ‘>’가 아닙니다.

  • 연산자는(+,-,*,/,> ,< ,!=...) 들은 벡터의 각 원소에 하나씩 적용
> x <- c(1,2,3)
> x+1
[1] 2 3 4

>x==2
[1] FALSE  TRUE FALSE



  • matrix(행렬) : 같은 타입의 값들을 저장하는 2차원 배열

m1 = matrix(data= c(1:20), nrow = 5, ncol = 4)
m1                                                                       # 행의 개수만 지정해도, 저장할 데이터가 20개이므로, 컬럼의 개수는 자동으로 지정된다.
     [,1] [,2] [,3] [,4]
[1,]    1    6   11   16
[2,]    2    7   12   17
[3,]    3    8   13   18
[4,]    4    9   14   19
[5,]    5   10   15   20


> m2<- matrix(data = c(1:20), nrow = 5, ncol = 4, byrow = T)                   # byrow 행부터 채운다. 기본값은 False
> m2
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12
[4,]   13   14   15   16
[5,]   17   18   19   20




  • 행렬(matrix)는 인덱스가 2개다.
> m1[1,2]
[1] 6
> m1[1:5,2]
[1]  6  7  8  9 10
> m1[1,c(T,F,T,F)]
[1]  1 11

  • 행과 열에 이름 지정
rnames <- c('Row1', "Row2")
cnames <- c('Col1','Col2', 'Col3')
m3 = matrix (data = c(1:6), nrow = 2, ncol = 3,
             dimnames = list(rnames, cnames))
> m3
     Col1 Col2 Col3
Row1    1    3    5
Row2    2    4    6

>m3[2,3]
[1] 6
>m3['Row2','Col3']                                        # 행/열의 이름이 있는 경우 인덱스 대신 이름 사용 가능
[1] 6



  • 배열Array : 3차원 이상의 배열
> 인덱스를 3개 이상 가짐.
> 같은 타입의 데이터들을 여러개 저장.

> a1<- array(data = c(1:24), dim = c(2,3,4))
> a1
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

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

, , 3

     [,1] [,2] [,3]
[1,]   13   15   17
[2,]   14   16   18

, , 4

     [,1] [,2] [,3]
[1,]   19   21   23
[2,]   20   22   24

  • projection(사상)

> a1[1, , ]
     [,1] [,2] [,3] [,4]
[1,]    1    7   13   19
[2,]    3    9   15   21
[3,]    5   11   17   23
> a1[ ,1, ]
     [,1] [,2] [,3] [,4]
[1,]    1    7   13   19
[2,]    2    8   14   20
> a1[ , ,1]
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> a1[1, ,1]
[1] 1 3 5

  • dimnames
> dname1 = c('x1','x2')
> dname2 = c('y1','y2','y3')
> dname3 = c('z1', 'z2', 'z3', 'z4')
> a2 <- array(data = c(1:24), dim = c(2,3,4),
+             dimnames = list(dname1, dname2, dname3))
> a2
, , z1

   y1 y2 y3
x1  1  3  5
x2  2  4  6

, , z2

   y1 y2 y3
x1  7  9 11
x2  8 10 12

, , z3

   y1 y2 y3
x1 13 15 17
x2 14 16 18

, , z4

   y1 y2 y3
x1 19 21 23
x2 20 22 24


  • List(리스트): 객체들의 집합
>다른 타입의 값(벡터, Matrix, 데이터프레임 등)들을 여러개 저장할 수 있는 데이터 구조
> list1 <- list(name = c('홍길동', '허균'),
+               age = c(16, 55),
+               height = c(179.9, 150.5))
> list1
$name
[1] "홍길동" "허균"  

$age
[1] 16 55

$height
[1] 179.9 150.5

> list1$name
[1] "홍길동" "허균"  

> list1$name[1]
[1] "홍길동"

list2 <- list(x = c(1:3),                                                 # vector
              y = matrix(c(1:4), nrow =2 , ncol = 2),        # matrix
              z = list1)                                                         # 리스트

> list2
$x
[1] 1 2 3

$y
     [,1] [,2]
[1,]    1    3
[2,]    2    4

$z
$z$name
[1] "홍길동" "허균"  

$z$age
[1] 16 55

$z$height
[1] 179.9 150.5

         >>    x = vector , y = table or matrix , z = list


> list2$x[3]
[1] 3
> list2$y[1,2]
[1] 3
> list2$z$name
[1] "홍길동" "허균"  


#리스트의 각 원소(항목)은 인덱스로 접근할 수도 있음.
#리스트에서 인덱스를 사용할 때는 [ [ ] ] 더블 대괄호를 사용함.
> list2[[1]]
[1] 1 2 3

> list2[[2]][1]
[1] 1