1차원 배열의 계산 (Vector 연산)
- 1차원 배열
- 각 배열은 vector로 지정하고 연산이 가능
- 곱셈 %*%
- 덧셈 +
- 배열 합치기 cbind(), rbind()
- 역배열, library(MASS)를 부른 후 ginv()
- 전치배열(행렬 바꾸기) : t()
2차원 배열 (Matrix)
- row와 column을 가지는 vector
- 각 column은 같은 mode(숫자 또는 문자 등)의 데이터
- 각 column내 수록된 항목의 갯수는 일정
- 생성 시 미리 크기를 지정할 것(nrow=,ncol=)
- 일반형 Matrix 만들기
- mymatrix <- matrix(vector, nrow=r, ncol=c, byrow=FALSE, dimnames=list(char_vector_rownames, char_vector_colnames))
- byrow = FALSE : matrix의 내용을 column우선으로 채움
- byrow = TRUE : matrix의 내용을 row 우선으로 채움
- dimnames : column 및 row에 대한 optional labels를 지정
> y <- matrix(1:20, nrow=5,ncol=4)
> y
[,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
> rnames <- c("row1","row2")
> cnames <- c("col1","col2")
> mymatrix <- matrix(1:4, nrow=2, ncol=2, byrow=TRUE, dimnames=list(rnames,cnames))
> mymatrix
col1 col2
row1 1 2
row2 3 4
- matrix의 row와 column에 함수 사용하기
- apply() 함수
- apply(m, dimcode, f, fargs)
- m = matrix
- dimcode = 1:row에 적용, 2: column에 적용
- f = 적용할 함수, fargs = optional arg'ts
- apply(m, dimcode, f, fargs)
- apply() 함수
> mymatrix <-matrix(c(1:10), nrow=5,ncol=2)
> apply(mymatrix, 1, mean) #row의 평균값 구하기
[1] 3.5 4.5 5.5 6.5 7.5
> apply(mymatrix, 1:2, function(x) x/2) # 모든 항목을 2로 나누기
[,1] [,2]
[1,] 0.5 3.0
[2,] 1.0 3.5
[3,] 1.5 4.0
[4,] 2.0 4.5
[5,] 2.5 5.0
2차원 이상 배열 (Array)
> myArray <- array(1:27, c(3,3,3))
> myArray
, , 1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
, , 2
[,1] [,2] [,3]
[1,] 10 13 16
[2,] 11 14 17
[3,] 12 15 18
, , 3
[,1] [,2] [,3]
[1,] 19 22 25
[2,] 20 23 26
[3,] 21 24 27
List
- 관련 없는 데이터를 함께 모으고자 할 때 사용
- 주로 함수나 각종 작업의 결과로서 반환되는 데이터의 형태
> a=c(1,2,3,4,5)
> b=c('가','나','다','라','마')
> c=c(TRUE, TRUE, TRUE, FALSE, FALSE)
> myList = list(a,b,c,1)
> myList
[[1]]
[1] 1 2 3 4 5
[[2]]
[1] "가" "나" "다" "라" "마"
[[3]]
[1] TRUE TRUE TRUE FALSE FALSE
[[4]]
[1] 1
- List에 항목 추가 및 삭제
> myList <- list(a='a',b='b',c='c')
> myList
$a
[1] "a"
$b
[1] "b"
$c
[1] "c"
> myList$d <- 'd' #항목 추가
> myList
$a
[1] "a"
$b
[1] "b"
$c
[1] "c"
$d
[1] "d"
> myList$d <- NULL #항목 삭제
> myList
$a
[1] "a"
$b
[1] "b"
$c
[1] "c"
- List에 함수 적용하기(lapply(), sapply())
> lapply(list(1:5, 10:15), median) #결과가 List형태로 반환
[[1]]
[1] 3
[[2]]
[1] 12.5
> sapply(list(1:5, 10:15), median) #결과가 vector 또는 matrix 형태로 반환
[1] 3.0 12.5
Data Frame
column column마다 다른 데이터 형식의 항목을 가질 수 있음
> a <- c(1,2,3,4,5)
> b <- c('가','나','다','라','마')
> c <- c(TRUE,TRUE,TRUE,FALSE,FALSE)
> mydata <- data.frame(a,b,c)
> names(mydata) <- c('id','name','factor')
> mydata
id name factor
1 1 가 TRUE
2 2 나 TRUE
3 3 다 TRUE
4 4 라 FALSE
5 5 마 FALSE
- 기술적으로 데이터프레임은 list의 일종
- 단 항목이 서로 같은 길이
- 데이터 프레임의 결합(merge)
- total <- merge(dataframeA, dataFrameB, by='id')
- RDBMS의 join과 유사
- 함수 적용
- List와 마찬가지로 sapply(), lapply() 적용
Factor
- 명목변수(nominal, categorical)일때 사용
- factor() #참거짓, ordered() #순서 함수의 option을 이용해 문자와 순서 사이의 대응관계를 조절
> rating <- c('large','medium','small')
> rating <- ordered(rating) #이 경우 rating 변수를 ordinal로 처리(1=large, 2=median, 3=small)
> rating
[1] large medium small
Levels: large < medium < small
- factor에 함수 적용하기
- tapply() 항목을 그룹별로 나눈 후 지정한 함수를 적용
- split() 항목을 그룹별로 분리
> age <- c(15,26,34,45,56)
> group <- c('A','A','B','B','B')
> tapply(age, group, mean)
A B
20.5 45.0
> group <- c('a','b','b','a','b')
> split(1:5,group)
$a
[1] 1 4
$b
[1] 2 3 5
데이터셋의 정보 획득을 위한 함수
- ls() #objects 목록 출력
- names(myData) #myData의 변수 목록
- str(myData) #myData의 구조 출력
- levels(mydata$v1) #mydata의 v1의 level
- dim(object) #object의 차원
- class(object) #object의 데이터 형식 출력
- head(mydata, n=10) #mydata의 상위 10개 row 출력
- tail(mydata, n=10) #mydata의 하위 10개 row 출력
반응형