작성일자 : 2023-09-28
Ver 0.1.1
Array
- Array는 이차원 혹은 그 이상의 고차원 자료구조를 갖는 객체로, 한 array에 속한 모든 원소는 동일한 자료형을 갖는다. 따라서 array는 matrix의 확장이다.
array( 1:24 , dim = c( 3 , 4 , 2 ) , dimnames = NULL )
## , , 1
##
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
##
## , , 2
##
## [,1] [,2] [,3] [,4]
## [1,] 13 16 19 22
## [2,] 14 17 20 23
## [3,] 15 18 21 24
array( 1:24 , dim = c( 3 , 4 , 2 ) ,
dimnames = list( dim1 = c( 'a1' , 'a2' , 'a3' ) ,
dim2 = c( 'b1' , 'b2' , 'b3' , 'b4' ) ,
dim3 = c( 'c1' , 'c2' ) ) )
## , , dim3 = c1
##
## dim2
## dim1 b1 b2 b3 b4
## a1 1 4 7 10
## a2 2 5 8 11
## a3 3 6 9 12
##
## , , dim3 = c2
##
## dim2
## dim1 b1 b2 b3 b4
## a1 13 16 19 22
## a2 14 17 20 23
## a3 15 18 21 24
Factor
- Factor는 범주형변수(categorical variable)를 위한 객체형이다.
- Factor는 복수의 수준(level)으로 표현된다.
- 두 종류의 factor가 존재: 명목형 변수(nominal variable)를 위한 factor와 순서형 변수(ordinal variable)를 위한 ordered factor가 있다.
age1 = c( 3 , 2 , 1 , 2 , 3 , 2 )
fac1 = factor( age1 , labels = c( 'TEENS' , 'TWENTIES' , 'THIRTIES' ) )
fac1
## [1] THIRTIES TWENTIES TEENS TWENTIES THIRTIES TWENTIES
## Levels: TEENS TWENTIES THIRTIES
ord1 = ordered( age1 , labels = c( 'TEENS' , 'TWENTIES' , 'THIRTIES' ) )
ord1
## [1] THIRTIES TWENTIES TEENS TWENTIES THIRTIES TWENTIES
## Levels: TEENS < TWENTIES < THIRTIES
ord2 = ordered( fac1 )
ord2
## [1] THIRTIES TWENTIES TEENS TWENTIES THIRTIES TWENTIES
## Levels: TEENS < TWENTIES < THIRTIES
Ordered factor
- 수준의 순서는 디폴트로 알파벳 순으로 주어진다.
- levels= 옵션을 이용하여 수준의 순서를 정할 수 있다.
fives = c( 'one' , 'two' , 'three' , 'four' , 'five' )
ordered( fives )
## [1] one two three four five
## Levels: five < four < one < three < two
## [1] one two three four five
## Levels: one < two < three < four < five
Factor의 특성과 조작
mode( fac1 )
## [1] "numeric"
length( fac1 )
## [1] 6
levels( fac1 )
## [1] "TEENS" "TWENTIES" "THIRTIES"
fac1[ 2 ]
## [1] TWENTIES
## Levels: TEENS TWENTIES THIRTIES
fac1[ 2 ] = 'TEENS'
fac1
## [1] THIRTIES TEENS TEENS TWENTIES THIRTIES TWENTIES
## Levels: TEENS TWENTIES THIRTIES
Factor를 이용한 2원분할표(2-way cross table)
name = c( 1 , 2 , 3 , 2 , 3 , 1 )
surname = factor( name , labels = c( 'Kim' , 'Lee' , 'Park' ) )
surname
## [1] Kim Lee Park Lee Park Kim
## Levels: Kim Lee Park
age = c( 3 , 2 , 1 , 2 , 3 , 2 )
ages = factor( age, labels = c( 'TEENS' , 'TWENTIES' , 'THIRTIES' ) )
ages
## [1] THIRTIES TWENTIES TEENS TWENTIES THIRTIES TWENTIES
## Levels: TEENS TWENTIES THIRTIES
tbl = table( surname , ages )
tbl
## ages
## surname TEENS TWENTIES THIRTIES
## Kim 0 1 1
## Lee 0 2 0
## Park 1 0 1
apply( tbl , 1 , sum )
## Kim Lee Park
## 2 2 2
apply( tbl , 2 , sum )
## TEENS TWENTIES THIRTIES
## 1 3 2
prop.table( tbl ) # proportion
## ages
## surname TEENS TWENTIES THIRTIES
## Kim 0.0000000 0.1666667 0.1666667
## Lee 0.0000000 0.3333333 0.0000000
## Park 0.1666667 0.0000000 0.1666667
prop.table( tbl , 1 ) # row proportion
## ages
## surname TEENS TWENTIES THIRTIES
## Kim 0.0 0.5 0.5
## Lee 0.0 1.0 0.0
## Park 0.5 0.0 0.5
round( prop.table( tbl , 2 ) , 2 ) # column proportion
## ages
## surname TEENS TWENTIES THIRTIES
## Kim 0.00 0.33 0.50
## Lee 0.00 0.67 0.00
## Park 1.00 0.00 0.50
tapply() 함수
- 함수 tapply( X , INDEX , FUN )은 객체 X를 INDEX의 수준별로 함수 FUN을 적용한다.
tapply( age , surname , length )
## Kim Lee Park
## 2 2 2
tapply( name , ages , length )
## TEENS TWENTIES THIRTIES
## 1 3 2
tapply( age , surname , function( x ) length( x ) / length( surname ) )
## Kim Lee Park
## 0.3333333 0.3333333 0.3333333
tapply( name , ages , function( x ) length( x ) / length( ages ) )
## TEENS TWENTIES THIRTIES
## 0.1666667 0.5000000 0.3333333
year = c( 1 , 2 , 3 , 2 , 3 , 3 , 2 , 1 , 2 , 1 )
pencil = c( 5 , 2 , 3 , 4 , 5 , 2 , 5 , 3 , 5 , 6 )
tapply( pencil , year , mean )
## 1 2 3
## 4.666667 4.000000 3.333333