DBILITY

R data type array, dataframe (배열, 데이터프레임) 본문

statistics/R

R data type array, dataframe (배열, 데이터프레임)

DBILITY 2018. 11. 22. 20:28
반응형

array()함수로 생성한다. 

array(data = NA, dim = length(data), dimnames = NULL) 형태로 선언하며,

data에는 벡터, dim에는 차원을 나타내는 벡터, dimnames는 행렬에서와 마찬가지로 list형태로 이름을 지정한다.

원소에 접근은 행열과 같다.

#2차원배열
> array(1:12, dim=c(4,3))
     [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12
#2차원 배열 행,열명 포함
> x<-array(c(1:6),dim = c(2,3),dimnames = list(c('r1','r2'),c('c1','c2','c3')))
> x
   c1 c2 c3
r1  1  3  5
r2  2  4  6
> str(x)
 int [1:2, 1:3] 1 2 3 4 5 6
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:2] "r1" "r2"
  ..$ : chr [1:3] "c1" "c2" "c3"

# 행렬 행,열명 포함- 위의 2차원배열과 동일한 결과 확인
> y<-matrix(c(1:6),nrow=2,ncol = 3,byrow = FALSE,dimnames = list(c('r1','r2'),c('c1','c2','c3')))
> str(y)
 int [1:2, 1:3] 1 2 3 4 5 6
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:2] "r1" "r2"
  ..$ : chr [1:3] "c1" "c2" "c3"
> y
   c1 c2 c3
r1  1  3  5
r2  2  4  6

#3차원배열 익히 알다시피 행,열,면의 순서다
> x<-array(1:12, dim=c(2,2,3))
> x
, , 1

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

, , 2

     [,1] [,2]
[1,]    5    7
[2,]    6    8

, , 3

     [,1] [,2]
[1,]    9   11
[2,]   10   12

#3면의 1행 전체열 선택
> x[1,,3]
[1]  9 11

> dim(x)
[1] 2 2 3
#선언시 행,열,면에 이름을 줄 수 있다.
> z<-array(1:12,dim=c(2,2,3) ,dimnames = list(c('r1','r2'),c('c1','c2'),c('d1','d2','d3')))
> z
, , d1

   c1 c2
r1  1  3
r2  2  4

, , d2

   c1 c2
r1  5  7
r2  6  8

, , d3

   c1 c2
r1  9 11
r2 10 12

> z['r2','c1','d3']
[1] 10

 

,그리드형태의 구조를 보니 데이터프레임을 많이 사용할 것 같다.

벡터,팩터,배열은 한가지 데이터형만 저장할 수 있느나, 데이터프레임은 리스트와 마찬가지로 혼합된 데이터형을 저장할 수 있다.

RDB에 익숙하다면 개념이 쉽게 이해된다.

행은 데이터셋(observation,관측치) , 열(features,피처)로 정의되어 있다.

문자열 벡터는 팩터로 변환된다. 생성시 stringsAsFactors옵션을 FALSE설정하면 문자열로 저장된다. 미지정시 TRUE다.

 

str()함수[Structure]는 데이터프레임의 구조를 표시한다.

 

데이터프레임은 data.frame()함수로 생성한다.

data.frame(..., row.names = NULL, check.rows = FALSE,

           check.names = TRUE, fix.empty.names = TRUE,

           stringsAsFactors = default.stringsAsFactors())

> df<-data.frame(x=c(1,2,3),y=c(4,5,6),z=c('a','b','c'))
> df
  x y z
1 1 4 a
2 2 5 b
3 3 6 c
> str(df)
'data.frame':	3 obs. of  3 variables:
 $ x: num  1 2 3
 $ y: num  4 5 6
 $ z: Factor w/ 3 levels "a","b","c": 1 2 3

> df<-data.frame(x=c(1,2,3),y=c(4,5,6),z=c('a','b','c'),stringsAsFactors = FALSE)
> df
  x y z
1 1 4 a
2 2 5 b
3 3 6 c
> str(df)
'data.frame':	3 obs. of  3 variables:
 $ x: num  1 2 3
 $ y: num  4 5 6
 $ z: chr  "a" "b" "c"

데이터프레임내 데이터의 참조,변경은 아래와 같다.

하나의 열(features)만 참조시 반환되는 데이터타입이 벡터다.

이경우에 데이터프레임으로 반환하고 싶을때는 drop=FALSE 옵션을 사용한다.

이외에는 데이터프레임으로 반환된다.

> df<-data.frame(x=c(1,2,3),y=c(4,5,6),z=c('a','b','c'),stringsAsFactors = FALSE)
> df
  x y z
1 1 4 a
2 2 5 b
3 3 6 c
> str(df)
'data.frame':	3 obs. of  3 variables:
 $ x: num  1 2 3
 $ y: num  4 5 6
 $ z: chr  "a" "b" "c"
> df$x
[1] 1 2 3
> df$x[2]
[1] 2
> df$x<-c(10,20,30)
> df$x
[1] 10 20 30
> df$y<-c(7:9)
> df$y
[1] 7 8 9
> df
   x y z
1 10 7 a
2 20 8 b
3 30 9 c
#열추가 - 행의 수가 같아야 한다. stringsAsFactors=TRUE여도 string으로 추가된다.
> df$col<-c('우리나라','대한민국','평화와번영')
> df
   x y z        col
1 10 7 a   우리나라
2 20 8 b   대한민국
3 30 9 c 평화와번영

> x<-data.frame(1:4)
> x
  X1.4
1    1
2    2
3    3
4    4
> colnames(x)<-c('col')
> x
  col
1   1
2   2
3   3
4   4
> rownames(x)<-c('r1','r2','r3','r4')
> x
   col
r1   1
r2   2
r3   3
r4   4
> df[1,1]
[1] 10
> df
   x y z        col
1 10 7 a   우리나라
2 20 8 b   대한민국
3 30 9 c 평화와번영
> df[1,4]
[1] "우리나라"
> df[1,'col']
[1] "우리나라"
> df[c(1,3),4]
[1] "우리나라"   "평화와번영"
> df[-1,-3]
   x y        col
2 20 8   대한민국
3 30 9 평화와번영
> df[-1,-4]
   x y z
2 20 8 b
3 30 9 c
> df[-c(1,3),]
   x y z      col
2 20 8 b 대한민국

> df
   x y z        col
1 10 7 a   우리나라
2 20 8 b   대한민국
3 30 9 c 평화와번영
> df[,names(df) %in% c('x','col')]
   x        col
1 10   우리나라
2 20   대한민국
3 30 평화와번영
> df[,!names(df) %in% c('x','col')]
  y z
1 7 a
2 8 b
3 9 c
> df[,4]
[1] "우리나라"   "대한민국"   "평화와번영"
> str(df[,4])
 chr [1:3] "우리나라" "대한민국" "평화와번영"
> str(df[,4,drop=FALSE])
'data.frame':	3 obs. of  1 variable:
 $ col: chr  "우리나라" "대한민국" "평화와번영"

 

반응형
Comments