160824: 109회차
Programming
2016. 8. 24. 18:21
종료하기 전 티스토리 네이버 로그아웃 할 것
1. 툴
동일
추가시:
2. 폴더
동일
추가시:
3. 사용할 사이트
동일
추가시:
4. 공부하는 것
[01] R 프로그램 시작 (설치) , R 자료형 (기본, 벡터, 팩터, 행렬)
[01] R프로그래밍 시작
참고) R화면 지우기: CRT + L
(1) 벡터(vector)
벡터는 C()함수로 작성한다
(2) 팩터(factor):범주형
카테고리 데이터를 나타낼때 사용할 수 있는 벡터이며, 수치값이 아니, 어떤 성질을 나타 냄, 벡터의 특수한 형태임. 예를 들어서 어떤 사람의 성별에 관한 값이 있을 것인데 (남자/여자) 그런것들을 나타낼 때는 Factor를 사용하면 된다.
1) 행렬의 속성
1. R 특징
- 통계 분석및 시각화를 위한 프로그래밍 언어.
- 객체지향이며, 패키지를 추가 및 사용하여 기능확장함.
- Java, C, Python등 다른 언어들과도 인터페이스 지원 가능
- 통계 분석, 모델링, 그래픽 작업등 사용
- 자료 분석, 조직화 및 시각화 가능
2. R 설치
- http://cran.r-project.org 에서 운영체제에 맞는 파일 다운로드합니다.
Download R for Windows -> base의 install R for the first time -> Download R 3.2.1 for Windows
- 구성요소 설치 화면에서 본인의 운영체제에 맞는 것만 선택해서 설치합니다.
- 실행후 다음과 같이 입력합니다.
> 1+4 : 1+4
> a<-5 : a=5
> a : a값 확인
> ls() :작업공간에 있는 객체 목록
> rm(x) :작업공간에 있는 객체 x 삭제
> q() :R종료
> getwd() :현재 작업공간 확인
- 작업공간변경: 파일 -> 작업디렉토리 변경 -> 변경할 폴더 선택(R 폴더아래 새로운 폴더 mywork생성후 선택)
- 자료형없이 객체를 선언하며 데이터 할당시 <- 를 사용합니다.
3. R 자료형
- 문자형(character) :문자, 문자열
- 수치형(numeric) : 정수(integer), 실수(double)
- 복소수형(complex) : 실수 + 허수
- 논리형 (logical) : TRUE(T, 1), FALSE(F, 0)
- NULL :비어있는 값
- NA : missing value, 결측값
- NaN(not a number) :수학적으로 정의되지 않은 값
- Inf, -Inf :무한대
- mode(), typeof() : 자료형 확인
- mode(), typeof() : 자료형 확인
참고) 복소수
참고) R화면 지우기: CRT + L
(1) 벡터(vector)
하나 이상의 원소로 구성된 데이터 구조, 하나의 벡터는 한 종류의 기본형만 존재함
벡터는 C()함수로 작성한다
(2) 팩터(factor):범주형
카테고리 데이터를 나타낼때 사용할 수 있는 벡터이며, 수치값이 아니, 어떤 성질을 나타 냄, 벡터의 특수한 형태임. 예를 들어서 어떤 사람의 성별에 관한 값이 있을 것인데 (남자/여자) 그런것들을 나타낼 때는 Factor를 사용하면 된다.
(3) 행렬(matrix)
동일한 형으로 이루어진 2차원 데이타 구조
- mode() : 타입 출력
- typeof() : 저장된 실제 타입
- dim() : 행과 열의 갯수
- dimnames() : 행과 열의 이름
- paste() : 문자열 연결
1) 행렬의 속성
행렬의 속성에는 벡터의 속성에다가 행과 열의 개수, 이름을 나타내는 dim과 dimnames가 포함된다.
예제)
> matr <- matrix(1:9, nrow=3) #3행 3열 행렬 생성
> dimnames(matr) <- list(paste("row", c(1:3)), paste("col", c(1:3)))
#행과 열 이름 지정
> matr
col 1 col 2 col 3
row 1 1 4 7
row 2 2 5 8
row 3 3 6 9
> length(matr) #자료의 개수
[1] 9
> mode(matr) #자료의 형태
[1] "numeric"
> dim(matr) #행과 열의 개수
[1] 3 3
> dimnames(matr) #행과 열의 이름 확인
[[1]]
[1] "row 1" "row 2" "row 3"
[[2]]
[1] "col 1" "col 2" "col 3"
2) 기본함수
행렬(matrix)은 여러 변수들이 이차원적으로 모여 있는 개체로, 행렬을 생성하기 위해서는 matrix() 함수를 사용한다.
matrix() 함수 이외에 cbind(), rbind(), dim() 등을 이용하여 행렬을 생성시킬 수 있다.
예1)
> matrix(1:9, nrow=3) #nrow : 행의 개수 지정
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
예2)
> matrix(c(1,4,7,2,5,8,3,6,9), byrow=T, ncol=3)
#ncol : 열의 개수 지정
#byrow=T : 행 기준 행렬을 생성
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
예3)
> r1 <- c(1,4,7) #r1, r2, r3 행 벡터 생성
> r2 <- c(2,5,8)
> r3 <- c(3,6,9)
> rbind(r1, r2, r3) #rbind : 행을 기준으로 결합
[,1] [,2] [,3]
r1 1 4 7
r2 2 5 8
r3 3 6 9
예4)
> c1 <- 1:3 #c1, c2, c3 열 벡터 생성
> c2 <- 4:6
> c3 <- 7:9
> cbind(c1, c2, c3) #cbind : 열을 기준으로 결합
c1 c2 c3
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
예5)
> m1 <- 1:9
> dim(m1) <- c(3,3) #dim : 차원을 지정
> m1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
3) 관련함수
행렬과 관련된 여러 함수와 성분의 추출과 삭제 등에 관해 알아보자.
예제)
> mat <- matrix(c(1,2,3,4,5,6,7,8,9), ncol=3, byrow=T)
#행 기준 3열의 행렬 생성
> mat
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
> mat[1,] #행렬 mat의 1행의 값
[1] 1 2 3
> mat[,3] #행렬 mat의 3열의 값
[1] 3 6 9
> mat[mat[,3] > 4, 1] #3열에서 4보다 큰 행의 값 중 1열의 모든 값
[1] 4 7
> mat[mat[,3] > 4, 2] #3열에서 4보다 큰 행의 값 중 2열의 모든 값
[1] 5 8
> mat[2,3] #2행 3열의 값 추출
[1] 6
>
#2행 값만을 추출
[,1] [,2] [,3]
[1,] 4 5 6
예제)
> is.matrix(mat[2,,drop=F]) #mat[2,,drop=F]가 행렬인지 확인
[1] TRUE
> mat[-2,-3] #2행과 3열의 값을 삭제
[,1] [,2]
[1,] 1 2
[2,] 7 8
> dim(mat) #차수 표시 : 3행 3열
[1] 3 3
> nrow(mat) #행의 개수 표시 : 3행
[1] 3
> ncol(mat) #열의 개수 표시 : 3열
[1] 3
> y <- diag(1:3) #diag : 대각행렬을 생성
> y
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 2 0
[3,] 0 0 3
> diag(y) # diag(y) : 대각원소 표현
[1] 1 2 3
> col(y) #col(y) : 원소들의 열 번호 표현
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 2 3
[3,] 1 2 3
예제)
> height <- c(140,155,142,175) #height 벡터 생성
> size.1 <- matrix(c(130,26,110,24,118,25,112,25), ncol=2, byrow=T,
+ dimnames=list(c("Abe", "Bob", "Carol", "Deb"), c("Weight", "Waist")))
#size.1 행렬 생성
> size <- cbind(size.1, height) #size.1 행렬과 height 벡터의 열 기준 결합
> size
Weight Waist height
Abe 130 26 140
Bob 110 24 155
Carol 118 25 142
Deb 112 25 175
> colmean <- apply(size, 2, mean) #2열의 평균값을 계산
> colmean
Weight Waist height
117.5 25.0 153.0
> rowmean <- apply(size, 1, mean) #1행의 평균값을 계산
> rowmean
Abe Bob Carol Deb
98.66667 96.33333 95.00000 104.00000
> colvar <- apply(size, 2, var) #2열의 분산값을 계산
> colvar
Weight Waist height
81.0000000 0.6666667 259.3333333
> rowvar <- apply(size, 1, var) #1행의 분산값을 계산
> rowvar
Abe Bob Carol Deb
3985.333 4430.333 3819.000 5673.000
예제)
> sweep(size, 2, colmean) #size 각 열의 값과 colmean의 차
Weight Waist height
Abe 12.5 1 -13
Bob -7.5 -1 2
Carol 0.5 0 -11
Deb -5.5 0 22
> sweep(size, 1, rowmean) #size 각 행의 값과 rowmean의 차
Weight Waist height
Abe 31.33333 -72.66667 41.33333
Bob 13.66667 -72.33333 58.66667
Carol 23.00000 -70.00000 47.00000
Deb 8.00000 -79.00000 71.00000
> sweep(size, 1, c(1,2,3,4), "+") #size 각 행의 값에 c(1,2,3,4)값을 더해줌
Weight Waist height
Abe 131 27 141
Bob 112 26 157
Carol 121 28 145
Deb 116 29 179
> sweep(size, 1, c(1,2,3,4), "-") #size 각 행의 값에 c(1,2,3,4)값을 빼줌
Weight Waist height
Abe 129 25 139
Bob 108 22 153
Carol 115 22 139
Deb 108 21 171
4) 행렬의 연산
여러 가지 함수를 이용하여 행렬의 곱셈, 역행렬, 대각행렬, 전치행렬
예제)
> m1 <- matrix(1:4, nrow=2) #1~4까지 2행 2열의 행렬 생성
> m1
[,1] [,2]
[1,] 1 3
[2,] 2 4
> m2 <- matrix(5:8, nrow=2) #5~8까지 2행 2열의 행렬 생성
> m2
[,1] [,2]
[1,] 5 7
[2,] 6 8
> m1*1:2 #m1의 1행×1, 2행×2
[,1] [,2]
[1,] 1 3
[2,] 4 8
> m1%*%m2 #m1과 m2 행렬의 곱셈
[,1] [,2]
[1,] 23 31
[2,] 34 46
> solve(m1) #m1행렬의 역 행렬 생성
[,1] [,2]
[1,] -2 1.5
[2,] 1 -0.5
> t(m1) #m1행렬의 전치행렬 생성
[,1] [,2]
[1,] 1 2
[2,] 3 4
> eigen(m1) #m1행렬의 고유치와 고유벡터
$values #고유치
[1] 5.3722813 -0.3722813
$vectors #고유벡터
[,1] [,2]
[1,] -0.5657675 -0.9093767
[2,] -0.8245648 0.4159736
> vec1 <- as.vector(m1) #행렬을 벡터로 변환
> vec1
[1] 1 2 3 4
[02] R 자료형 (array, list, data frame)
(4) 배열(array)
set.seed는 pseudorandom number, 즉 유사난수를 생성하기 위한 알고리즘이다.
(7) 시계열
동일한 형으로 이루어진 다차원 데이타 구조, 벡터에 차원부여하면 배열임
배열(Array)은 행렬을 2차원 이상으로 확장시킨 객체이다.
배열(Array)은 행렬을 2차원 이상으로 확장시킨 객체이다.
따라서 2차원의 구조를 갖는 행렬도 배열의 한 종류이다.
그러나 일반적으로 3차원 이상의 차원을 갖는 데이터 객체를 배열이라고 부른다.
1) 배열(Array)의 속성
배열의 속성은 행렬의 속성과 같이 자료의 개수를 나타내는 length, 형태를 보여주는 mode,
각 차원의 벡터의 크기를 나타내는 dim 그리고 각 차원의 리스트 이름을 나타내는
dimnames로 구성되어 있다.
예제)
> arr <- array(1:24, c(3,3,2)) #1~18까지의 자료 생성
> dimnames(arr) <- list(paste("row", c(1:3)),paste("col", c(1:3)),paste("ar", c(1:2)))
#각 차원의 이름을 지정
> arr
, , ar 1
col 1 col 2 col 3
row 1 1 4 7
row 2 2 5 8
row 3 3 6 9
, , ar 2
col 1 col 2 col 3
row 1 10 13 16
row 2 11 14 17
row 3 12 15 18
> length(arr) #자료의 개수 확인
[1] 18
> mode(arr) #자료의 형태 확인
[1] "numeric"
> dim(arr) #각 차원 벡터의 크기
[1] 3 3 2
> dimnames(arr) #각 차원 리스트의 이름
[[1]]
[1] "row 1" "row 2" "row 3"
[[2]]
[1] "col 1" "col 2" "col 3"
[[3]]
[1] "ar 1" "ar 2"
2) 배열(Array)의 생성
배열을 생성하기 위한 함수로 array() 함수와 dim() 함수가 있다.
- array() 함수
예제)
> array(1:6) #1~6의 자료로 1차원 배열 생성
[1] 1 2 3 4 5 6
> array(1:6, c(2,3)) #1~6의 자료로 2차원 배열 생성
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> array(1:8, c(2,2,2)) #1~8의 자료로 3차원 배열 생성
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
- dim() 함수
예제)
> arr <- c(1:24) #1~24의 자료 생성
> dim(arr) <- c(3,4,2) #dim() 함수를 이용하여 3행 4열의 행렬 2개 생성
> arr
, , 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
2) 배열의 연산+
같은 크기의 배열간의 사칙연산 및 같은 위치의 원소간의 연산을 수행할 수 있다.
또한 숫자와 배열 또는 배열과 숫자간의 산술 연산도 가능하다.
예제)
> ary1 <- array(1:8, dim = c(2,2,2))
> ary2 <- array(8:1, dim = c(2,2,2))
> ary1
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
> ary2
, , 1
[,1] [,2]
[1,] 8 6
[2,] 7 5
, , 2
[,1] [,2]
[1,] 4 2
[2,] 3 1
> ary1 + ary2 #자료의 덧셈
, , 1
[,1] [,2]
[1,] 9 9
[2,] 9 9
, , 2
[,1] [,2]
[1,] 9 9
[2,] 9 9
> ary1 * ary2 #자료의 곱셈
, , 1
[,1] [,2]
[1,] 8 18
[2,] 14 20
, , 2
[,1] [,2]
[1,] 20 14
[2,] 18 8
> ary1 %*% ary2 #두 배열 원소들의 곱의 합
[,1]
[1,] 120
> sum(ary1 * ary2)
[1] 120
3) 배열원소의 추출 및 삭제
배열의 원소를 추출하는 방법은 행렬의 경우와 유사한데,
“,”로 구분하여 차원의 인덱스를 기술하면 된다.
예제)
> ary1[,,1]
[,1] [,2]
[1,] 1 3
[2,] 2 4
> ary1[1,1,]
[1] 1 5
> ary1[1,,-2]
[1] 1 3
set.seed는 pseudorandom number, 즉 유사난수를 생성하기 위한 알고리즘이다.
유사난수란 알고리즘의 상태에 의해 생성되는 수열(from wikipedia).
즉 무차별적으로 숫자가 생성되는 것이 아니라 랜덤하긴 하지만 일정한 규칙이 있는 것이다
(5) 리스트(list)
서로다른 자료형의 데이터들로 이루어진 자료형
리스트는 성분(component)이라는 것으로 이루어지는데 이 성분들은 서로 다른
형의 원소를 가질 수 있고, 길이도 다를 수 있다. 성분은 행렬과 배열의 차원과 유사하다.
리스트를 생성하는 함수는 list()이다.
예)
>li <- list("top", c(2,4,6),c(T,F,T)) #list(문자, 숫자, 논리형 객체)
[[1]]
[1] "top"
[[2]]
[1] 2 4 6
[[3]]
[1] TRUE FALSE TRUE
> li[[1]] #[[1]]:첫 번째 성분
[1] "top"
예)
> mat1 <- matrix(1:4, nrow=2)
> list1 <- list("A", 1:8, mat1)
> list1
[[1]]
[1] "A"
[[2]]
[1] 1 2 3 4 5 6 7 8
[[3]]
[,1] [,2]
[1,] 1 3
[2,] 2 4
> son <- list(son.name = c("Minsu", "Minchul"), son.cnt = 2, son.age = c(2.6))
> son
$son.name
[1] "Minsu" "Minchul"
$son.cnt
[1] 2
$son.age
[1] 2.6
1) 리스트 속성
예)
> a <- 1:10
> b <- 11:15
> klist <- list(vec1=a, vec2=b, descrip="example")
> length(klist) #klist 리스트 자료의 개수
[1] 3
> mode(klist) #klist 리스트 자료의 형태
[1] "list"
> names(klist) #klist 리스트 각 구성요소의 이름
[1] "vec1" "vec2" "descrip"
2) 리스트 생성 및 다양한 변화
리스트에서의 성분을 추출하는 방법은 [[]] 를 사용하며,
성분의 이름을 지정하였다면 $ 연산자를 사용한다. 또한, 성분의 원소를 추출하고자 하는 경우에는
[] 연산자를 사용한다. 그리고 리스트에서 성분과 성분의 원소를 추가 또는 삭제할 수도 있다.
예)
> exm <- list(c("Abe", "Bob", "Carol", "Deb"),c("Weight","Waist"))
> exm #exm 리스트 생성
[[1]]
[1] "Abe" "Bob" "Carol" "Deb"
[[2]]
[1] "Weight" "Waist"
> exm[[2]] #리스트의 2번째 성분
[1] "Weight" "Waist"
> exm[[2]][2] #2번째 성분 2번째 원소
[1] "Waist"
예)
> names(exm) <- c("Rows","Columns") #exm 리스트에 성분 이름 부여
> exm
$Rows
[1] "Abe" "Bob" "Carol" "Deb"
$Columns
[1] "Weight" "Waist"
> exm$Rows #exm의 Rows 성분만 표현
[1] "Abe" "Bob" "Carol" "Deb"
> exm$Rows[2] #Rows 성분 2번째 원소 표현
[1] "Bob"
> exm$Columns #exm의 Columns 성분만 표현
[1] "Weight" "Waist"
예)
> list1 <- list("A", 1:8) #list1 리스트 생성
> list1
[[1]]
[1] "A"
[[2]]
[1] 1 2 3 4 5 6 7 8
> list1[[3]] <- list(c(T, F)) #세 번째 성분을 추가
> list1[[2]][9] <- 9 #두 번째 성분에 원소 추가
> list1
[[1]]
[1] "A"
[[2]]
[1] 1 2 3 4 5 6 7 8 9
[[3]]
[[3]][[1]]
[1] TRUE FALSE
> list1[[3]] <- NULL #세 번째 성분 삭제
> list1[[2]] <- list1[[2]][-9] #두 번째 성분의 9번째 원소 삭제
> list1
[[1]]
[1] "A"
[[2]]
[1] 1 2 3 4 5 6 7 8
3) 관련함수
리스트는 성분에 리스트와 벡터 등을 사용할 수 있다.
예)
> a <- 1:10
> b <- 11:15 #벡터 a, b 생성
> klist <- list(vec1=a, vec2=b, descrip="example")
> klist
$vec1
[1] 1 2 3 4 5 6 7 8 9 10
$vec2
[1] 11 12 13 14 15
$descrip
[1] "example"
> klist[[2]][5] #두 번째 성분 vec2의 5번째 원소
[1] 15
> klist$vec2[c(2,3)] #vec2의 2, 3번째 원소
[1] 12 13
(6) 데이터 프레임(data frame)
list와 행렬의 특징을 가짐
데이터 프레임은 행렬과 비슷한 형태로 되어 있으나, 행렬은 차원으로 표시되며 같은 형태(mode)의
객체를 가지는 반면, 데이터 프레임은 각 열(column)들이 서로 다른 형태(mode)의 객체를 가질 수
있으므로 범주형 변수를 가질 수도 있기 때문에 범주형 자료분석에도 유용하게 사용된다.
1) 데이터 프레임의 장점
- 데이터 프레임은 형태(mode)가 일반화된 행렬(matrix)이다.
- 데이터 프레임이라는 하나의 객체에 여러 종류의 자료가 들어갈 수 있다.
- 데이터 프레임의 각 열은 각각 변수와 대응한다.
- 분석이나 모형 설정에 적합한 자료 객체이다.
2) 데이터 프레임의 생성
- 데이터 프레임을 생성하는 방법으로는 read.table() 함수를 이용하여 외부 텍스트 파일을
불러들이는 방법
- data.frame() 함수를 이용하여 여러 종류의 자료객체들을 서로 결합시키는 방법
- as.data.frame() 함수를 사용하여 다른 형태의 자료객체를 데이터 프레임의 형태로 변환하는 방법이 있다.
>> read.table()
외부의 파일에 대해서는 read.table() 함수를 이용해서 생성한다.
read.table() 함수의 괄호 안에 자료가 입력 되어있는 곳의 경로명을 지정한다.
이때 자료는 다음과 같이 작성되어 “c:\exam\story.txt"에 저장되어 있다고 하자.
no name age sex
1 Lee 55 M
2 Park 47 F
3 So 35 M
4 Kim 26 F
5 Yoon 29 M
예)
> test1 <- read.table("c:\\exam\\story.txt") //역슬래시 2개
> test1
V1 V2 V3 V4
1 no name age sex
2 1 Lee 55 M
3 2 Park 47 F
4 3 So 35 M
5 4 Kim 26 F
6 5 Yoon 29 M
행의 번호가 있음에도 또 다시 행의 번호가 지정되어있으므로,
이를 해결해보자
예)
> test2 <- read.table("c:\\exam\\story.txt",row.names = 'no', header = T)
> test2
name age sex
1 Lee 55 M
2 Park 47 F
3 So 35 M
4 Kim 26 F
5 Yoon 29 M
read.table() 함수의 인수 중에서 row.names = 'no'는 행 이름임을 알려주며,
header = T 는 첫 번째 줄이 헤드라인임을 알려준다.
test2를 보면 첫 번째 열과 세 번째 열은 범주형, 두 번째 열은 숫자형 중에서도 정수형으로 서로 다르다.
자료의 구조는 행렬과 같은데 각각 열의 데이터 유형이 다른 점이 행렬과 큰 차이점이다.
>> data.frame()
이 함수는 이미 생성되어 있는 벡터들을 결합하여 데이터 프레임을 생성하는 것이다.
벡터 char1과 num1을 결합하여 test1이라는 데이터 프레임을 생성해보자.
예)
> char1 <- rep(LETTERS[1:3],c(2,2,1)) #벡터 char1 ,rep(a,b) a를 b만큼반복
> char1
[1] "A" "A" "B" "B" "C"
> num1 <- rep(1:3,c(2,2,1)) #벡터 num1
> num1
[1] 1 1 2 2 3
> test1 <- data.frame(char1, num1) #test1 데이터 프레임 생성
> test1
char1 num1
1 A 1
2 A 1
3 B 2
4 B 2
5 C 3
ls 는 지금까지 사용한 객체들 다 보여줌
>> as.data.frame()
이 함수를 이용하면 모든 다른 종류의 자료객체들을 데이터 프레임으로 변환할 수가 있다.
행렬 a1을 test3라는 데이터프레임의 형태로 변환하면 다음과 같다.
예)
> a1 <- c("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o")
> dim(a1) <- c(5,3)
> a1 #a1 행렬
[,1] [,2] [,3]
[1,] "a" "f" "k"
[2,] "b" "g" "l"
[3,] "c" "h" "m"
[4,] "d" "i" "n"
[5,] "e" "j" "o"
> test3 <- as.data.frame(a1) #a1을 데이터 프레임으로 변환
> test3
V1 V2 V3
1 a f k
2 b g l
3 c h m
4 d i n
5 e j o
3) 데이터 프레임 합치기
여러 데이터 프레임을 합쳐서 하나의 데이터 프레임으로 생성할 수가 있는데 이렇게 합치는 방법에는
각각의 데이터 프레임을 옆으로 합치는 방법과 아래로 합치는 방법이 있다.
- 옆으로 합치기
데이터 프레임을 옆으로 합치는 경우에는 cbind() 함수를 사용하는데, cbind() 함수를 사용할 때
두 데이터 프레임간에 같은 변수가 있으면 그 변수가 두 번 나타나게 되는데 이러한 경우에 merge()
함수를 사용하면 같은 변수에 대해서 한번만 보여주게 된다.
예)
> cbind(test1,test3)
char1 num1 V1 V2 V3 #test1과 test2를 옆으로 합친 형태
1 A 1 a f k
2 A 1 b g l
3 B 2 c h m
4 B 2 d i n
5 C 3 e j o
- 아래로 합치기
데이터 프레임을 아래로 합치는 경우에는 rbind() 함수를 사용하는데, 아래로 합칠 때에는 자료의 열의
개수가 동일해야 하고 변수 이름도 동일해야 한다.
예)
> char1 <- rep(LETTERS[3:1],c(3,3,3))
> char2 <- rep(LETTERS[1:3],c(3,3,3))
> dim(char1) <- c(3,3)
> char1
[,1] [,2] [,3]
[1,] "C" "B" "A"
[2,] "C" "B" "A"
[3,] "C" "B" "A"
> dim(char2) <- c(3,3)
> char2
[,1] [,2] [,3]
[1,] "A" "B" "C"
[2,] "A" "B" "C"
[3,] "A" "B" "C"
>
>
>
>
> data.frame(char1)
X1 X2 X3
1 C B A
2 C B A
3 C B A
> data.frame(char2)
X1 X2 X3
1 A B C
2 A B C
3 A B C
> rbind(char1,char1)
[,1] [,2] [,3]
[1,] "C" "B" "A"
[2,] "C" "B" "A"
[3,] "C" "B" "A"
[4,] "C" "B" "A"
[5,] "C" "B" "A"
[6,] "C" "B" "A"
> rbind(char2, char2)
[,1] [,2] [,3]
[1,] "A" "B" "C"
[2,] "A" "B" "C"
[3,] "A" "B" "C"
[4,] "A" "B" "C"
[5,] "A" "B" "C"
[6,] "A" "B" "C"
>
(7) 시계열
시간에 따른 관측치들 순서대로 나열,저장
- data:데이터, start:시작 지점, end:종료지점
frequency=1:년 ,4:분기, 12 :월주기
5. 수업
진도:
hw:
6. 할것
'Programming' 카테고리의 다른 글
160826: 111회차 (0) | 2016.08.26 |
---|---|
160825: 110회차 (0) | 2016.08.25 |
160823: 108회차 (0) | 2016.08.23 |
160822: 107회차 (0) | 2016.08.22 |
160819: 106회차 (0) | 2016.08.19 |