154
분석언어 R 기초 2014.01.20 윤형기 ([email protected] ) (v.0.5)

윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

  • Upload
    lyphuc

  • View
    240

  • Download
    5

Embed Size (px)

Citation preview

Page 1: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

분석언어 R 기초

2014.01.20

윤형기 ([email protected])

(v.0.5)

Page 2: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

목차

R 설치

R의 사용자 인터페이스

데이터 입력

데이터 관리

그래프 기본

통계 기본

맺음말

Page 3: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

R의 설치

R 사이트에 접속 후 모듈 다운로드 CRAN (Comprehensive R Archive Network)

http://www.cran.r-project.org/index.html

http://www.cran.r-project.org/

Page 4: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

더블클릭하여 설치 시작

Page 5: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

R 실행

Page 6: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

R의 특징 – Why R?

오픈소스 소프트웨어 – 자유 + 무료 출현 배경은 S 언어.

기본 명령(함수) + 외부 packages 설치

특징 어떤 환경에서든 사용 가능 (Windows, Unix, MacOS).

프로그래밍 가능.

그래픽 기능이 뛰어남.

인터프리터 언어(interpreted language)이며 대소문자 구별.

함수형 언어 • 대부분의 함수결과는 다른 함수에 입력되어 사용

• 모든 데이터 object는 메모리 상에서 이용됨.

Page 7: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

R의 사용자 인터페이스

Page 8: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

R 사용자 인터페이스 <목차>

작업공간 (Workspace)

입출력

할당 (Assignment)

Packages

작업 시작 환경의 Customizing

특수한 출력 지정

Batch 처리

결과의 재사용

Page 9: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

작업공간 (Workspace)

사용자 인터페이스 명령어 방식

• 대화식: > 프롬프트에서 명령어 입력

• source() 명령어에 R의 스크립트 파일 지정

그래픽 환경 • 기본 설치된 R의 메뉴 이용 또는 GUI 기반의 R을 별도로 설치 사용

R의 작업공간 둘러보기

Page 10: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

R은 기본적으로 명령어 사용 방식. (프롬프트는 >)

그래픽 환경에 대한 많은 노력 진행 RStudio

R Commander

Page 11: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

기본원리 – 함수와 객체 기본 내장: vectors, matrices, data frames, lists, functions

사용자 작성: 함수 및 object를 프로그래밍하여 사용

편리한 기능 작업종료 시 작업공간의 이미지 저장 후 다음 작업 시 reload 가능.

위/아래방향의 화살표 key를 통해 명령어 history기능을 이용

통상 프로젝트 별로 물리적 폴더를 배정. • MS Windows 사용자의 경우:

• 잘못된 예 c:\mydocuments\myfile.txt • 왜냐하면 R에서 "\“는 escape character.

• 올바른 예: c:\\my documents\\myfile.txt 또는

• c:/mydocuments/myfile.txt

Page 12: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

편리한 기능 – 계속 – 주석 (comment)

• ‘#’를 이용

도움말 기능: help.start() # general help

help(foo) # help about function foo

?foo # same thing

example(foo) # show an example of function foo

RSiteSearch("foo") # help 매뉴얼 및 mailing lists 검색

History기능 history() # 디폴트는 최근 사용된 25개 명령어 목록

savehistory(file="myfile") # 작업내역을 저장 (".Rhistory“가

디폴트)

loadhistory(file="myfile") # 앞서의 작업내역을 이용

Page 13: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

맛보기: 계산기 기능 > 5+4

> 7^2

> log(10)

> exp(1)

R 설치하면 많은 예제 데이터가 제공됨. 사용 가능한 dataset을 보려면:

data( ) # Load된 package에 따라 결과는 다르다.

개별 dataset의 세부 내용을 보려면: help(datasetname)

Session별 환경 option help(options) # 이용 가능한 options

options() # 현재 설정된 option 상황

Page 14: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

작업 디렉토리 getwd() # 현재 디렉토리 - cwd

ls() # 현재 workspace에 있는 object 목록

setwd(mydirectory) # mydirectory로 이동

setwd("c:/docs/mydir") # MS Windows에서도 \ 대신 /를 이용할 것

오류메시지 > sqrt(-2)

[1] NaN

경고메시지:

In sqrt(-2) : NaN이 생성되었습니다

> absolute(3)

에러: 함수 "absolute"를 찾을 수 없습니다

끝내기 > q()

Page 15: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

입출력

입력 source( ) 함수이용

• 현행 session의 script 수행 (디폴트는 현재 디렉토리) source("myfile") # script파일의 적용

출력 sink( ) 함수 - 출력 방향을 지정.

sink("myfile", append=FALSE, split=FALSE) # 출력을 파일로 지정

sink() # 출력을 터미널 화면으로 복구

• append option - 덮어 쓸지 또는 추가할지를 지정.

• split option – 출력 파일과 함께 화면출력도 할지를 지정. # 예: 출력을 특정 파일로 지정 (해당 이름의 파일을 엎어 쓴다)

sink("c:/projects/output.txt")

# 예: 출력을 특정 파일로 지정 (기존 파일에 내용 추가, 화면에도 동시에 출력)

sink("myfile.txt", append=TRUE, split=TRUE)

Page 16: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

그래픽 출력 • sink( )대신 다음의 함수를 이용

• dev.off( ) – 화면출력으로 복원.

jpeg("c:/mygraphs/myplot.jpg") # 다른 곳에 저장 시 full path 지정

plot(x)

dev.off()

Function Output to

pdf("mygraph.pdf") pdf 파일

win.metafile("mygraph.wmf") windows metafile

png("mygraph.png") png 파일

jpeg("mygraph.jpg") jpeg 파일

bmp("mygraph.bmp") bmp 파일

postscript("mygraph.ps") postscript 파일

Page 17: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

할당 (Assignment)

변수에 값을 배정하는 것

R에서는 =, <-, <<- 를 사용할 수 있다. 그 밖에 =, <<- 도 사용 가능

할당된 객체는 메모리를 차지 rm() 불필요한 객체를 메모리에서 제거

> x=5; y=2

> x+3

[1] 8

> x+y

[1] 7

> print(x+y)

[1] 7

> x=pi

> x

[1] 3.141593

> rm(x)

Page 18: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

패키지 (Package)

Package = R 함수, 데이터 및 컴파일된 코드의 모음.

R 최초 설치 시 base package 제공 기타 필요한 것은 별도 설치.

Library Package가 저장된 디렉토리로서 load 시켜야 사용이 가능

.libPaths() # library 위치 확인

library() # library 내에 존재하는 packages 목록

search() # 현재 load되어 있는 packages 목록

Packages 추가 ① 다운로드 설치 (한번만 하면 됨). install.packages(package명)

② CRAN Mirror사이트 선택. (e.g. Korea)

③ 현재의 session에 load (session당 한번만 실시) library(package명)

Page 19: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

작업 시작환경의 Customization

R은 항상 Rprofile.site 파일을 먼저 수행. MS Windows: C:\Program Files\R\R-n.n.n\etc directory.

Rprofile 파일은 홈 디렉토리 또는 별도 디렉토리에 저장 가능.

Rprofile.site 파일 찾는 순서 • 현행 디렉토리 > 사용자의 홈 디렉토리

Rprofile.site 파일에는 2개의 함수를 지정 가능 .First( ) – R session 시작될 때 수행

.Last( ) – R session이 종료할 때 수행

Page 20: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Batch 처리

일괄처리 방식 (non-interactively) 처리 MS Windows의 경우 (경로명은 조절)

"C:\Program Files\R\R-2.13.1\bin\R.exe" CMD BATCH

--vanilla --slave "c:\my projects\my_script.R"

Linux의 경우 R CMD BATCH [options] my_script.R [outfile]

Page 21: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

처리결과의 재 사용

출력결과를 화면에 출력 lm(mpg~wt, data=mtcars)

결과는 화면 출력되지만 저장되지 앟는다.

출력결과를 별도의 object에 저장 fit <- lm(mpg~wt, data=mtcars)

결과는 fit이라는 이름으로 저장되며 화면에는 출력되지 않음

출력결과의 내역정보 str(fit) # view the contents/structure of "fit"

"fit"라는 이름의 list에 대한 관련 정보를 수록.

Page 22: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 입력

Page 23: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 입력 <목차>

데이터 기초

데이터 타입

데이터 끌어오기 (Importing)

키보드 입력

DBMS의 액세스

데이터 보내기 (exporting)

Dataset에 대한 정보 획득

변수의 Labels

결측치 (Missing Data)

날짜/시간 데이터

Page 24: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 기초

데이터와 데이터셋 (dataset) 데이터

데이터셋 • 여러 관측값을 가지는 것

• 위 데이터를 data vector로 저장할 때 c()를 이용 > Rev_2012 = c(110,105,120,140) # 예: 분기별 매출

> Rev_2013 = c(105,115,140,135)

> Revenue = cbind(Rev_2012, Rev_2013) # column별로 결합

> Revenue

Rev_2012 Rev_2013

[1,] 110 105

[2,] 105 115

[3,] 120 140

[4,] 140 135

>

Page 25: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

R의 데이터 형태 (mode) 숫자형 (numeric)

• 숫자로만 이루이진 것 (문자가 들어있으면 전체가 문자형으로 바뀜)

문자형 (character) • “ “ 또는 ‘ ‘로 표시

논리값 (logical value: TRUE, FALSE) • 내부적으로 TRUE는 1, FALSE는 0

• 0이외의 숫자는 TRUE로 여겨짐

Page 26: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 형태의 변환 데이터 형태 확인

is.numeric() is.character()

is.vector() is.matrix()

is.data.frame()

데이터 변환 함수 (뒷면)

~ 로 변환 변환함수 규칙

숫자형 (numeric) 데이터

as.numeric FALSE 0 “1”,”2” 1,2

논리형 (logical) 데이터 as.logical 0 FALSE

문자형 데이터 as.character 1,2 - “1”,”2” FALSE “FALSE”

Factor as.factor 범주형 (factor) 형태로 변경

Vector as.vector 벡터 형태로 변화

Matrix as.matrix Matrix 형태로 변환

데이터프레임 as.dataframe 데이터프레임 형태로 변환

Page 27: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 벡터 > x = c(1,3,5,7)

> x

[1] 1 3 5 7

문자 벡터 > family = c("아버지", "어머니","딸","아들")

> family

[1] "아버지" "어머니" "딸" "아들"

논리벡터 > c(T,T,F,T)

[1] TRUE TRUE FALSE TRUE

> x = -5:3

> x

[1] -5 -4 -3 -2 -1 0 1 2 3

> w = x < -2

> w

[1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE>

Page 28: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

R의 데이터 타입 vectors (numerical, character, logical)

• scalars

Matrices

Arrays

data frames

lists.

Page 29: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 타입 – Vector

… a <- c(1,2,5.3,6,-2,4) # numeric vector

b <- c("one","two","three") # character vector

c <- c(TRUE,TRUE,TRUE,FALSE,TRUE,FALSE) #logical vector

Vector의 개별 항목 (elements)은 첨자 (subscripts)로 지정

[]로 표시 a[c(2,4)] # 2번째와 4번째 항목

> new_a <- a[-2] # 2번째 항목을 제외

> new_a

[1] 1.0 5.3 6.0 -2.0 4.0

Page 30: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 타입 – Matrices

각 column은 같은 mode(숫자 또는 문자 등)의 데이터 column내 수록된 항목의 개수는 일정

일반형 mymatrix <- matrix(vector, nrow=r, ncol=c, byrow=FALSE,

dimnames=list(char_vector_rownames, char_vector_colnames))

byrow=TRUE

• matrix 의 내용을 row 우선으로 채운다. byrow=FALSE

• matrix 의 내용을 Column 우선으로 채운다. (디폴트). dimnames

• column 및 row에 대한 optional labels 지정 y<-matrix(1:20, nrow=5,ncol=4) # 5 x 4 numeric matrix 생성

Page 31: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

또 다른 예 cells <- c(1,26,24,68)

rnames <- c("R1", "R2")

cnames <- c("C1", "C2")

mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE,

dimnames=list(rnames, cnames))

row, column 및 항목의 식별은 첨자 (subscripts)를 이용 x[,4] # matrix의 4째 column

x[3,] # matrix의 3째 row of

x[2:4,1:3] # 2,3,4번 row의 1,2,3번 column

Page 32: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

참조: 행렬의 계산

Page 33: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

> x = c(1,2,3,4,5)

> y = c(-1,-2,-3,-4,-5)

> # x+ y

> x+y

[1] 0 0 0 0 0

> # x'y

> t(x) %*% y

[,1]

[1,] -55

> # xx'

> x %*% t(x)

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

[1,] 1 2 3 4 5

[2,] 2 4 6 8 10

[3,] 3 6 9 12 15

[4,] 4 8 12 16 20

[5,] 5 10 15 20 25

Page 34: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

> # 각 성분의 곱

> x * y

[1] -1 -4 -9 -16 -25

> # x, y를 합쳐 두 개의 열을 가진 행렬로 만들기

> new_matrix = cbind(x,y)

> new_matrix

x y

[1,] 1 -1

[2,] 2 -2

[3,] 3 -3

[4,] 4 -4

[5,] 5 -5

> # 행렬의 차원

> dim(new_matrix)

[1] 5 2

>

Page 35: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 타입 – Array

Matrices와 동일하나 2차원 이상의 항목을 가진다. 예: 4 x 3 x 2의 3차원 배열에 1~24의 값을 입력 > x <- array(1:36, c(4,3,3))

> x[1,,]

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

[1,] 1 13 25

[2,] 5 17 29

[3,] 9 21 33

> x[,,1]

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

[1,] 1 5 9

[2,] 2 6 10

[3,] 3 7 11

[4,] 4 8 12

Page 36: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 타입 – Data Frame

Column마다 다른 모드(숫자, 문자, factor 등)의 항목을 가질 수 있다.

d <- c(1,2,3,4)

e <- c("red", "white", "red", NA)

f <- c(TRUE,TRUE,TRUE,FALSE)

mydata <- data.frame(d,e,f)

names(mydata) <- c("ID","Color","Passed") # 변수 명

data frame의 항목 식별: myframe[3:5] # 3,4,5번 column

myframe[c("ID","Age")] # ID 및 Age columns

myframe$X1 # x1 변수

Page 37: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 타입 – List

객체목록으로서 항목의 순서가 의미를 가지는 것 (An ordered collection of objects). 하나의 이름으로 다양한 (possibly unrelated) 객체를 저장 가능.

# example of a list with 4 components -

# a string, a numeric vector, a matrix, and a scaler

w <- list(name="Fred", mynumbers=a, mymatrix=y, age=5.3)

# example of a list containing two lists

v <- c(list1,list2)

항목의 식별은 [[]] 를 이용. mylist[[2]] # 2nd component of the list

mylist[["mynumbers"]] # component named mynumbers in list

Page 38: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 타입 – Factor

변수가 명목변수일 때 사용 각 항목은 [ 1... k ] 범위의 숫자 vector로 인식

factor() 및 ordered() 함수의 option을 통해 문자와 순서 사이의 대응관계를 조절할 수 있다.

factor를 이용해서 value label을 만들 수도 있다. # 예: 20명의 "male(남성)"과 30명 "female(여성)"을 가지는 gender라는 변수

gender <- c(rep("male",20), rep("female", 30))

gender <- factor(gender)

# R은 gender를 nominal 변수로 처리. (내부적으로 1=female, 2=male)

summary(gender)

순서변수는 ordered factor를 이용 # 예: "large", "medium", "small'로 지정된 rating이라는 변수

rating <- ordered(rating)

# 이 경우 rating변수를 ordinal로 처리 (1=large, 2=medium, 3=small)

Page 39: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

몇 가지 유용한 함수들

length(object) # object가 가진 항목의 개수

str(object) # object의 구조

class(object) # object의 class 또는 type

names(object) # names

c(object,object,...) # 객체를 결합(combine) vector를 만듬.

cbind(object, object, ...) # combine objects as columns

rbind(object, object, ...) # combine objects as rows

object # object를 출력

ls() # 현재의 object 목록을 출력

rm(object) # object 삭제

newobject <- edit(object) # 복사하여 새로 생성

fix(object) # 곧바로 수정, 변경

Page 40: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 끌어오기 (Importing)

Import from: csv 텍스트 파일 첫 줄은 변수의 이름, 항목 구분자(separator)는 comma

각 줄(row)에는 변수 번호 (id) 적용

MS Windows의 경우 \ 대신 / 를 사용

mydata <- read.table("c:/mydata.csv", header=TRUE,

sep=",", row.names="id")

Page 41: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Import from: Excel CSV 파일로 저장한 후 앞서의 방법을 이용할 수 있다.

MS Windows – RODBC package 이용. 첫째 row는 column 명.

library(RODBC)

channel <- odbcConnectExcel("c:/myexel.xls")

mydata <- sqlFetch(channel, "mysheet")

odbcClose(channel)

Page 42: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

키보드 입력 SAS, SPSS, Excel, Stata, DB, ASCII 파일에서 import할 때:

# create a data frame from scratch

age <- c(25, 30, 56)

gender <- c("male", "female", "male")

weight <- c(160, 110, 220)

mydata <- data.frame(age,gender,weight)

R의 자체 편집기를 이용할 수 있다. # enter data using editor

mydata <- data.frame(age=numeric(0), gender=character(0),

weight=numeric(0))

mydata <- edit(mydata)

Page 43: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

DBMS의 액세스

RODBC package ODBC interface.

주요 함수:

Function Description

odbcConnect(dsn, uid="", pwd="") ODBC 데이터베이스에 connection open

sqlFetch(channel, sqtable) ODBC DB 테이블을 읽어서 data frame에 가져옴

sqlQuery(channel, query) Submit a query to an ODBC database and return the results

sqlSave(channel, mydf, tablename

= sqtable, append = FALSE)

Write or update (append=True) a data frame to a table in the ODBC database

sqlDrop(channel, sqtable) ODBC 데이터베이스에서 table 제거

close(channel) Close the connection

Page 44: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

# 예:DBMS의 2개 테이블(Crime & Punishment)을

# 2개의 R 데이터프레임 (crimedat & pundat)으로 import

library(RODBC)

myconn <-odbcConnect("mydsn", uid="Rob", pwd="aardvark")

crimedat <- sqlFetch(myconn, Crime)

pundat <- sqlQuery(myconn, "select * from Punishment")

close(myconn)

기타의 Interfaces RMySQL package –interface to MySQL.

ROracle package – interface for Oracle.

RJDBC package – JDBC interface.

Page 45: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 보내기 (exporting)

Tab Delimited Text File write.table(mydata, "c:/mydata.txt", sep="\t")

Excel Spreadsheet library(xlsReadWrite)

write.xls(mydata, "c:/mydata.xls")

Page 46: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Dataset에 대한 정보 획득

ls() # objects 목록 출력

names(mydata) # mydata에 있는 변수 목록

str(mydata) # mydata의 구조 출력

levels(mydata$v1) # mydata의 v1 factor의 level

dim(object) # object의 차원 (dimensions)

class(object) # object (numeric, matrix, data frame, etc)의 class

mydata # mydata 출력

head(mydata, n=10) # mydata의 맨 앞 10개 row 출력

tail(mydata, n=5) # mydata의 맨 뒤 5개 row 출력

Page 47: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Value Labels

factor 함수를 통해 자체의 value label을 만들 수 있다. # 작업목표: 변수 v1이 1=red, 2=blue, 3=green의 값을 가지도록 함

mydata$v1 <- factor(mydata$v1,

levels = c(1,2,3),

labels = c("red", "blue", "green"))

# variable y is coded 1, 3 or 5

# we want to attach value labels 1=Low, 3=Medium, 5=High

mydata$v1 <- ordered(mydata$y,

levels = c(1,3, 5),

labels = c("Low", "Medium", "High"))

nominal 데이터는 factor(), ordinal 데이터는 ordered() 이용.

Page 48: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

결측치 (Missing Data)

결측치는 NA (not available)로 표시된다.

불능값 (예: dividing by zero)는 NaN (not a number)로 표시. 문자, 숫자에 상관없이 같은 symbol 사용

결측치 여부 검사 is.na(x) # TRUE of x가 결측치면 TRUE를 반환

y <- c(1,2,3,NA)

is.na(y) # vector (F F F T) 변환

결측치에 대한 대처 mydata$v1[mydata$v1==99] <- NA # v1 변수에서 99값은 결측치로 해석

Page 49: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

분석 시 결측치를 배제하지 않으면 결과 자체가 결측치가 된다. x <- c(1,2,NA,3)

mean(x) # returns NA

mean(x, na.rm=TRUE) # returns 2

complete.cases() – complete 여부에 따라 논리값 출력. # list rows of data that have missing values

mydata[!complete.cases(mydata),]

na.omit() – 결측값 제거 # 결측치는 생략한 채 처리하여 결과를 newdata에 저장

newdata <- na.omit(mydata)

기타의 결측치 처리 R 함수 별 옵션 이용.

Page 50: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

날짜/시간 (Date) 데이터

1970-01-01 이후의 날자 수로 표현 (음수는 이전 시점 표시).

# as.Date( ) – string을 date로 변환

mydates <- as.Date(c("2007-06-22", "2004-02-13"))

# number of days between 6/22/07 and 2/13/04

days <- mydates[1] - mydates[2]

Sys.Date( ) – 오늘

date() – 현재 날짜 및 시간

Page 51: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

다음은 format( ) 함수에서 이용 가능한 symbol.

예: 오늘 날짜 출력 today <- Sys.Date()

format(today, format="%B %d %Y")

"June 20 2007"

Symbol 의미 예

%d day as a number (0-31) 01-31

%a

%A 단축 형 요일 표시 비 단축 형 요일 표시

Mon Monday

%m month (00-12) 00-12

%b

%B 단축 형 월 표시 비 단축 형 월 표시

Jan January

%y

%Y 2-digit year 4-digit year

07 2007

Page 52: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

날짜 변환 문자 날짜

• as.Date(x, "format") 함수 이용.

• x는 문자데이터, format은 필요한 포맷 지정. # date 정보를 'mm/dd/yyyy'포맷으로 변환

strDates <- c("01/05/1965", "08/16/1975")

dates <- as.Date(strDates, "%m/%d/%Y")

• 디폴트 포맷: yyyy-mm-dd mydates <- as.Date(c("2007-06-22", "2004-02-13"))

날짜 문자

• as.Character( ) 함수 이용. strDates <- as.character(dates)

Page 53: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 관리

Page 54: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 관리 <목차>

새로운 변수의 생성

연산자 (Operators)

내장 함수

제어문

사용자 작성 함수

데이터의 정렬

데이터 병합 (Merge)

Aggregating Data

Reshaping Data

Subsetting Data

apply() 함수

Page 55: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

새로운 변수의 생성

치환 연산자 <- 를 이용 다음 3가지 중 하나 선택 가능

mydata$sum <- mydata$x1 + mydata$x2

mydata$mean <- (mydata$x1 + mydata$x2)/2

attach(mydata)

mydata$sum <- x1 + x2

mydata$mean <- (x1 + x2)/2

detach(mydata)

mydata <- transform( mydata,

sum = x1 + x2,

mean = (x1 + x2)/2

)

Page 56: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

변수를 Recoding하기

# 예1: 2개의 나이별(age) 범주 그룹(categories)를 생성

mydata$agecat <- ifelse(mydata$age > 70,

c("older"), c("younger"))

# 예2: 3개의 age categories를 생성

attach(mydata)

mydata$agecat[age > 75] <- "Elder"

mydata$agecat[age > 45 & age <= 75] <- "Middle Aged"

mydata$agecat[age <= 45] <- "Young"

detach(mydata)

Page 57: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

연산자 (Operators)

Binary 연산자는 vector, matrix 및 scalar 모두에 적용됨.

Arithmetic Operators

Operator Description

+ 더하기

- 빼기

* 곱하기

/ 나누기

^ or **

지수 (제곱)

x %% y 나머지 (x mod y) 5%%2 is 1

x %/% y

integer division 5%/%2 is 2

Page 58: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Logical Operators

Operator Description

< less than

<= less than or equal to

> greater than

>= greater than or equal to

== exactly equal to

!= not equal to

!x Not x

x | y x OR y

x & y x AND y

isTRUE(x) test if X is TRUE

Page 59: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

# 예:

x <- c(1:10)

x

1 2 3 4 5 6 7 8 9 10

x > 8

F F F F F F F F T T

x < 5

T T T T F F F F F F

x > 8 | x < 5

T T T T F F F F T T

x[c(T,T,T,T,F,F,F,F,T,T)]

1 2 3 4 9 10

x[(x>8) | (x<5)] # 결과: 1 2 3 4 9 10

Page 60: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

수학함수

수학 함수

Function Description

abs(x) 절대값

sqrt(x) 제급근

ceiling(x) ceiling(3.475) 는 4

floor(x) floor(3.475) 는 3

trunc(x) trunc(5.99) 는 5

round(x, digits=n) round(3.475, digits=2) 는 3.48

cos(x), sin(x), tan(x) 이 밖에도 acos(x), cosh(x), acosh(x)등

log(x)

log10(x)

exp(x) e^x

Page 61: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

문자함수

문자 함수

Function Description

substr(x, start=n1,

stop=n2)

문자vector에서 substring을 추출 또는 변경

grep(pattern, x ,

ignore.case=FALSE,

fixed=FALSE)

Search for pattern in x. fixed =FALSE pattern은 정규표현 식. fixed=TRUE pattern 은 텍스트 문자열이며 해당 index를 산출 grep("A", c("b","A","c"), fixed=TRUE) 2

sub(pattern,

replacement, x,

ignore.case =FALSE,

fixed=FALSE)

x에서 pattern을 찾아서 변경시킴. fixed=FALSE pattern 은 정규표현 식. fixed = T pattern은 텍스트 문자열. sub("\\s",".","Hello There") "Hello.There"

strsplit(x, split) 문자열의 지정 element를 분리 (Split).

strsplit("abc", "") 3 개의 vector로 분리. 즉, "a","b","c"

paste(..., sep="") sep으로 구분시키면서 문자열 연결 (Concatenate)

toupper(x)

tolower(x)

대문자로 변환 소문자로 변환

Page 62: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

예 x <- "abcdef"

substr(x, 2, 4) # "bcd"

substr(x, 2, 4) <- "22222" # "a222ef"

paste("x",1:3,sep="") # c("x1","x2" "x3")

paste("x",1:3,sep="M") # c("xM1","xM2" "xM3")

paste("Today is", date())

확률 x <- pretty(c(-3,3), 30) # 표준정규곡선

y <- dnorm(x)

plot(x, y, type='l', xlab="Normal Deviate", ylab="Density",

yaxs="i")

pnorm(1.96) is 0.975

#50 random normal variates with mean=50, sd=10

x <- rnorm(50, m=50, sd=10)

# 10회 실시에서 head가 0~5 나올 확률

dbinom(0:5, 10, .5)

# 10회 실시에서 head가 5번 이하 나올 확률

pbinom(5, 10, .5)

Page 63: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

확률 함수

확률 함수

Function Description

dnorm(x) 정규밀도함수 (default m=0 sd=1)

pnorm(q) 누적 정규 확률 (area under the normal curve to the right of q)

qnorm(p) normal quantile 즉, 정규분포 상의 p percentile의 값

rnorm(n, m=0,sd=1) n 개의 정규편차 (random normal deviates) (평균: m, 표준편차: sd).

dbinom(x, size, prob)

pbinom(q, size, prob)

qbinom(p, size, prob)

rbinom(n, size, prob)

이항분포 (size = 표본 수, prob = 확률)

dpois(x, lamda)

ppois(q, lamda)

qpois(p, lamda)

rpois(n, lamda)

poisson 분포 (m=std=lamda) # lamda=4일 때의 0,1, or 2 event가 발생할

확률

dpois(0:2, 4)

dunif(x, min=0, max=1)

punif(q, min=0, max=1)

qunif(p, min=0, max=1)

runif(n, min=0, max=1)

일양분포 (uniform distribution) #10 uniform random variates

x <- runif(10)

Page 64: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로
Page 65: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로
Page 66: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

통계 함수

다음 통계함수에서 na.rm option을 통해 결측치 제거 후 작업. Object는 numeric vector 또는 데이터프레임.

Page 67: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

통계함수

Function Description

mean(x, trim=0,

na.rm=FALSE)

object x의 평균 # trimmed mean, 결측치 제거 및 상하위 점수 5% mx <- mean(x,trim=.05,na.rm=TRUE)

sd(x) object(x)의 표준편차. var(x)= 분산. mad(x) = median absolute deviation.

median(x) Median

quantile(x, probs) x = 원하는 quantile의 숫자 vector probs = 숫자 vector (확률: [0,1] ) # x의 30번째와 84번째의 percentiles

y <- quantile(x, c(.3,.84))

range(x) 범위

sum(x) 합계

diff(x, lag=1) lagged differences (lag는 lag 방식 지정)

min(x) 최소값

max(x) 최대값

scale(x, center=TRUE,

scale=TRUE)

column center or standardize a matrix.

Page 68: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

기타의 유용한 함수

기타 함수

Function Description

seq(from , to, by) 수열 (sequence) 생성 indices <- seq(1,10,2)

#indices is c(1, 3, 5, 7, 9)

rep(x, ntimes) n 회 반복 y <- rep(1:3, 2)

# y is c(1, 2, 3, 1, 2, 3)

cut(x, n) divide continuous variable in factor with n levels y <- cut(x, 5)

Page 69: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

제어문

다음 표시 중 expr에 { }를 이용하여 복합문을 이용할 수 있다.

if-else if (cond) expr

if (cond) expr1 else expr2

for for (var in seq) expr

while while (cond) expr

switch switch(expr, ...)

ifelse ifelse(test,yes,no)

Page 70: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

예제 - matrix의 전치(轉置) (단, 내장함수 t() 참조) # matrix의 전치(轉置) – 가급적 내장함수 t() 를 이용할 것

mytrans <- function(x) {

if (!is.matrix(x)) {

warning("argument is not a matrix: returning NA")

return(NA_real_)

}

y <- matrix(1, nrow=ncol(x), ncol=nrow(x))

for (i in 1:nrow(x)) {

for (j in 1:ncol(x)) {

y[j,i] <- x[i,j]

}

}

return(y)

}

# try it

z <- matrix(1:10, nrow=5, ncol=2)

tz <- mytrans(z)

Page 71: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

사용자 작성 함수

사용자 함수의 표준형

myfunction <- function(arg1, arg2, ... ){

statements

return(object)

}

Page 72: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

함수 내의 Object는 지역(local) 변수. # 예: central tendency와 분산도(spread) 계산.

mysummary <- function(x,npar=TRUE,print=TRUE) {

if (!npar) {

center <- mean(x); spread <- sd(x)

} else {

center <- median(x); spread <- mad(x)

}

if (print & !npar) {

cat("Mean=", center, "\n", "SD=", spread, "\n")

} else if (print & npar) {

cat("Median=", center, "\n", "MAD=", spread, "\n")

}

result <- list(center=center,spread=spread)

return(result)

}

Page 73: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

# 함수 호출

set.seed(1234)

x <- rpois(500, 4)

y <- mysummary(x)

Median= 4

MAD= 1.4826

# y$center는 median (4) ,

# y$spread는 median absolute deviation (1.4826)

y <- mysummary(x, npar=FALSE, print=FALSE)

# no output

# y$center is the mean (4.052)

# y$spread is the standard deviation (2.01927)

함수명을 ( ) 없이 지정하면 소스코드를 볼 수 있다.

Page 74: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터의 정렬

order( )

디폴트는 ASCENDING.

sorting 변수 앞에 – (minus) 표시를 하면 DESCENDING order. # 예: mtcars 데이터 셋을 정렬

attach(mtcars)

# sort by mpg

newdata <- mtcars[order(mpg),]

# sort by mpg and cyl

newdata <- mtcars[order(mpg, cyl),]

#sort by mpg (ascending) and cyl (descending)

newdata <- mtcars[order(mpg, -cyl),]

detach(mtcars)

Page 75: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 병합 (merge)

Column 추가 merge 함수 – 2개 데이터 프레임(datasets)을 수평적으로 merge

대개, 공통의 key변수에 의해 join (i.e., an inner join). # merge two data frames by ID

total <- merge(data frameA,data frameB,by="ID")

# merge two data frames by ID and Country

total <- merge(data frameA,data frameB,by=c("ID","Country"))

Rows 추가 rbind 함수 - 2개 데이터 프레임(datasets)을 수직적으로 merge.

양 데이터 프레임는 같은 변수를 가질 것. (순서는 달라도 무방). total <- rbind(data frameA, data frameB)

특정 변수가 데이터프레임 A 에는 있지만 B에는 없는 경우: • 1. Delete the extra variables in data frameA or

• 2. Create the additional variables in data frameB and set them to NA (missing) before joining them with rbind( ).

Page 76: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터 총량화 (Aggregating Data)

BY 변수와 함수지정을 통해 데이터를 압축 (collapse) # mtcars를 aggregate. 숫자변수에 대해 평균계산

attach(mtcars)

aggdata <-aggregate(mtcars, by=list(cyl,vs), FUN=mean, na.rm=TRUE)

print(aggdata)

detach(mtcars)

단, by 변수는 항상 list에 있을 것

함수는 내장, 사용자 작성 모두 가능.

참조: summarize() in the Hmisc package

summaryBy() in the doBy package

Page 77: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

데이터의 모양 변경 (Reshaping)

전치 (轉置: Transpose) t() – transpose a matrix or a data frame.

# 예:

mtcars

t(mtcars)

Reshape Package "melt" data 각 row가 고유한 id-variable 조합의 형태가 됨.

그런 후 원하는 형태로 변경 ("cast“)

Page 78: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

mydata

Id time x1 x2

1 1 5 6

1 2 3 5

2 1 6 1

2 2 2 4

# example of melt function

library(reshape)

mdata <- melt(mydata, id=c("id","time"))

newdata

Id Time Variable Value

1 1 x1 5

1 2 x1 3

2 1 x1 6

2 2 x1 2

1 1 x2 6

1 2 x2 5

2 1 x2 1

2 2 x2 4

Page 79: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

# cast the melted data

# cast(data, formula, function)

subjmeans <- cast(mdata, id~variable, mean)

timemeans <- cast(mdata, time~variable, mean)

subjmeans

timemeans

melt( ) and cast( ) 함수에는 그 밖의 다양한 기능이 많음.

id x1 x2

1 4 5.5

2 4 2.5

time x1 x2

1 5.5 3.5

2 2.5 4.5

Page 80: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Subsetting Data

R의 indexing 기능을 통해 특정 변수 등을 선택.

변수 선택 (Keeping)의 예:

# select variables v1, v2, v3

myvars <- c("v1", "v2", "v3")

newdata <- mydata[myvars]

# another method

myvars <- paste("v", 1:3, sep="")

newdata <- mydata[myvars]

# select 1st and 5th thru 10th variables

newdata <- mydata[c(1,5:10)]

Page 81: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

특정 변수 배제 (DROPPING) 의 예: # v1, v2, v3 변수를 배제

myvars <- names(mydata) %in% c("v1", "v2", "v3")

newdata <- mydata[!myvars]

# 3째 및 5째 변수를 배제

newdata <- mydata[c(-3,-5)]

# v3 및 v5를 삭제

mydata$v3 <- mydata$v5 <- NULL

Page 82: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

특정 row (Observations) 선택 # 맨 앞의 5개 observerations

newdata <- mydata[1:5,]

# 변수 값에 의거하는 경우

newdata <- mydata[ which(mydata$gender=='F'

& mydata$age > 65), ]

# 또는

attach(newdata)

newdata <- mydata[ which(gender=='F' & age > 65),]

detach(newdata)

Page 83: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Subset 함수를 통한 선택 # 예(1): 나이가 20 이상 또는 10 미만인 사람의 ID와 Weight.

newdata <- subset(mydata,age>= 20|age < 10,select=c(ID, Weight))

# 예(2): 나이가 25 이상인 남자의 weight부터 income까지 모든 column.

newdata <- subset(mydata, sex=="m" & age > 25,

select=weight:income)

Page 84: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

무작위 (Random) 표본 sample( ) 함수 –random sample of size n from a dataset.

# take a random sample of size 50 from a dataset mydata

# sample without replacement

mysample <- mydata[sample(1:nrow(mydata), 50, replace=FALSE),]

Page 85: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

정리

Dates dates 는 문자 또는 숫자로 변환이 가능.

예제

to one long vector

to matrix

to data frame

from Vector

c(x,y) cbind(x,y)

rbind(x,y)

data.frame(x,y)

from Matrix

as.vector(my

matrix)

as.data.frame(

mymatrix)

from data frame

as.matrix(my

frame)

Page 86: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

apply() 함수

행렬의 행과 열에 대해 원하는 함수를 적용 형태: apply(data, dim, function)

• dim=1 이면 각 행(row)에 function을 적용

• dim=2 이면 각 열(column)에 function을 적용

Page 87: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

## Compute row and column sums for a matrix:

x <- cbind(x1 = 3, x2 = c(4:1, 2:5))

dimnames(x)[[1]] <- letters[1:8]

apply(x, 2, mean, trim = .2)

col.sums <- apply(x, 2, sum)

row.sums <- apply(x, 1, sum)

rbind(cbind(x, Rtot = row.sums), Ctot = c(col.sums,

sum(col.sums)))

stopifnot( apply(x,2, is.vector)) # not ok in R <= 0.63.2

apply(x, 2, sort) # column을 정렬

##- function with extra args:

cave <- function(x, c1,c2) c(mean(x[c1]),mean(x[c2]))

apply(x,1, cave, c1="x1", c2=c("x1","x2"))

ma <- matrix(c(1:4, 1, 6:8), nr = 2)

apply(ma, 1, table) #--> a list of length 2

apply(ma, 1, quantile)# 5 x n matrix with rownames

stopifnot(dim(ma) == dim(apply(ma, 1:2, sum)))

Page 88: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

R의 그래프 기초

Page 89: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

R의 그래프 기초 <목차>

R 그래프 개요

plot() 함수

그래프 생성

밀도 Plots

점 (Dot) Plots

막대 (Bar) Plots

선 도표 (Line Charts)

파이 차트 (Pie Charts)

상자 그림 (Boxplots)

Scatter Plots

Page 90: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

R 그래프 개요

R에서의 다양한 그래프 기능의 예 demo(graphics); > demo(persp)

Sine 함수와 cosine 함수 이용 예: x = (0:20) * pi / 10; y = cos(x)

x = (0:20) * pi / 10

y = cos(x)

plot(x,y)

ysin = sin(x)

ysin2 = sin(x) ^2

plot(x,y)

lines(x,ysin2)

par(mfrow = c(2,2))

plot(x,y, type="p")

plot(x,y, type="l")

plot(x,y, type="b")

plot(x,y, type="p", pch=19, col="red")

Page 91: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

그래프의 저장 그래픽 환경에서의 메뉴를 이용:

• File -> Save As.

다음의 함수를 이용.

Function Output to

pdf("mygraph.pdf") pdf 파일

win.metafile("mygraph.wmf") windows metafile

png("mygraph.png") png 파일

jpeg("mygraph.jpg") jpeg 파일

bmp("mygraph.bmp") bmp 파일

postscript("mygraph.ps") postscript 파일

Page 92: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

여러 개의 그래프를 동시에 이용하기 새 그래프는 기존 그림을 덮어 쓰므로 이를 피하려면 다음 함수를 이용하여 새 그래프 생성 전에 미리 새 graph window를 열 것.

• 이를 통해 여러 개 graph windows를 한번에 열 수 있다.

• help(dev.cur)

또는 첫 graph window를 연 후, • 메뉴에서 History -> Recording 선택한 후 Previous 및 Next 를 이용

Function Platform

windows() Windows

X11() Unix

quartz() Mac

Page 93: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

plot() 함수

plot( ) 함수 graph widow를 열고 plotting

대화식으로 그래프 생성 # Creating a Graph

attach(mtcars)

plot(wt, mpg)

abline(lm(mpg~wt))

title("Regression of MPG on Weight")

plot()함수의 옵션: 뒷면

Page 94: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

파라미터 Option 및 설명

type = 그래프의 형태를 지정 type=“p” 점(point) 그래프 type=“l” 선(line) 그래프 type=“b” 점과 선으로 이어서 그림 type=“o” 선이 점 위에 겹쳐진 형태 type=“h” 수직선으로 그림 type=“s” 계단(step)형 그래프

xlim =

ylim = x축과 y축의 상한과 하한. xlim = c(1,10) 또는 xlim = range(x)

xlab =

ylba = x축과 y축의 이름(label) 부여

main = 그래프의 위쪽에 놓이는 주 제목(main title).

sub = 그래프의 아래쪽에 놓이는 소 제목(subtitle).

bg= 그래프의 배경화면 색깔

bty= 그래프를 그리는 상자의 모양

Page 95: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

pch

lty

파라미터 Option 및 설명

pch = 표시되는 점의 모양

lty = 선의 종류 1: 실선(solid line) 2: 파선 (dashed) 3: 점선: 점선(dotted) 4: dot-dash

col= 색깔 지정 “red”,”green”,”blue” 및 색상을 나타내는 숫자

mar = c(bottom, left, top, right) 의 순서로 가장자리 여분 값을 지정. 디폴트는 c(5,4,4,2) + 0.1

Page 96: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

예: par(mfrow = c(2,2))

plot(x,y, type="b", main = "cosie 그래프", sub = "type = b")

plot(x,y, type="o", las = 1, bty = "u", sub = "type = o")

plot(x,y, type="h", bty = "7", sub = "type = h")

plot(x,y, type="s", bty = "n", sub = "type = s")

Page 97: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

abline() 직선

abline(a,b) # 절편=a, 기울기=b인 직선

abline(h=y) # 수평선

abline(v=x) # 수직선

abline(lm.obj) # lm.obj에 지정된 직선

예: data(cars)

attach(cars)

par(mfrow=c(2,2))

plot(speed, dist, pch=1); abline(v=15.4)

plot(speed, dist, pch=2); abline(h=43)

plot(speed, dist, pch=3); abline(-14,3)

plot(speed, dist, pch=8); abline(v=15.4); abline(h=43)

Page 98: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

히스토그램

Histograms hist(x) 함수

• x 는 plotting하려는 값의 숫자 vector

• freq=FALSE option 빈도 대신 확률밀도

• breaks= option bin의 개수 지정

Histogram의 단점 • 구간의 개수에 크게 영향을 받는다.

# 가장 단순한 히스토그램

hist(mtcars$mpg)

# 구간의 개수를 지정. 색상 지정

hist(mtcars$mpg, breaks=12, col="red")

Page 99: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

밀도 Plot

핵 밀도(Kernel Density) Plots plot(density(x)) 단, x는 수치 vector.

# Kernel Density Plot

d <- density(mtcars$mpg)

plot(d) # plots the results

# Filled Density Plot

d <- density(mtcars$mpg)

plot(d, main="Kernel Density of Miles Per Gallon")

polygon(d, col="red", border="blue")

Page 100: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Kernel Density를 이용한 Group 비교 sm package의 sm.density.compare(x, factor)

• x는 숫자 vector, factor는 grouping 변수.

• superimpose the kernal density plots of two or more groups. # Compare MPG distributions for cars with 4,6, or 8 cylinders

library(sm)

attach(mtcars)

# create value labels

cyl.f <- factor(cyl, levels= c(4,6,8),

labels = c("4 cylinder", "6 cylinder", "8 cylinder"))

# 밀도곡선의 plotting

sm.density.compare(mpg, cyl, xlab="Miles Per Gallon")

title(main="MPG Distribution by Car Cylinders")

# add legend via mouse click

colfill<-c(2:(2+length(levels(cyl.f))))

legend(locator(1), levels(cyl.f), fill=colfill)

Page 101: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로
Page 102: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

점 plotting

점 Plotting (Dot Plot) dotchart(x, labels=)

x는 숫자 vector, labels은 각 점의 레이블.

groups= option x를 그룹화할 factor 지정.

dotchart(mtcars$mpg,labels=row.names(mtcars),

cex=.7,main="Gas Milage for Car Models",

xlab="Miles Per Gallon")

Page 103: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

# Dotplot: 그룹별, 정렬 (기준: mpg, group), 색깔 (by cylinder)

x <- mtcars[order(mtcars$mpg),] # sort by mpg

x$cyl <- factor(x$cyl)

x$color[x$cyl==4] <- "red"

x$color[x$cyl==6] <- "blue"

x$color[x$cyl==8] <- "darkgreen"

dotchart(x$mpg,labels=row.names(x),cex=.7,groups= x$cyl,

main="Gas Milage for Car Models\ngrouped by cylinder",

xlab="Miles Per Gallon", gcolor="black", color=x$color)

Page 104: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

막대 (Bar) Plots

barplot(height) height는 vector 또는 matrix.

• If (height is a vector) • 값에 따라 높이가 달라짐.

• If (height is a matrix AND option beside=FALSE) • 각 bar는 height column에 대응되고 값은 stacked “sub-bars”의 높이)

• If (height is a matrix AND beside=TRUE) • the values in each column are juxtaposed rather than stacked.

• option names.arg=(character vector) 막대에 대한 label

• option horiz=TRUE 수평 barplot 생성

단, Bar plot은 빈도수 외에 여타의 통계량도 bar plotting가능. (means, medians, sd 등)

• aggregate( ) 함수의 결과를 barplot( ) 에 전달하는 방식

Page 105: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

# Simple Bar Plot

counts <- table(mtcars$gear)

barplot(counts, main="Car Distribution", xlab="Number of Gears")

# Simple Horizontal Bar Plot with Added Labels

counts <- table(mtcars$gear)

barplot(counts, main="Car Distribution", horiz=TRUE,

names.arg=c("3 Gears", "4 Gears", "5 Gears"))

Page 106: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Stacked Bar Plot # Stacked Bar Plot with Colors and Legend

counts <- table(mtcars$vs, mtcars$gear)

barplot(counts, main="Car Distribution by Gears와 VS에 따른 자동차

분포“, xlab="Gear의 수", col=c("darkblue","red"),

legend = rownames(counts))

Page 107: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Grouped Bar Plot # Grouped Bar Plot

counts <- table(mtcars$vs, mtcars$gear)

barplot(counts, main=“Gears와 VS에 따른 자동차 분포",

xlab="Gear의 수", col=c("darkblue","red"),

legend = rownames(counts), beside=TRUE)

Page 108: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

선 도표 (Line Charts)

선 도표 (Line Charts) lines(x, y, type=)

• x와 y는 연결하고자 하는 점좌표의 숫자 vector

• type= 다음의 값을 가짐

Type Description

p 점

l 선

o overplotted points와 lines

b, c 선으로 연결(join)된 points ("c“의 경우 비었음)

s, S stair steps

h histogram-like vertical lines

n 아무 것도 출력치 않음

Page 109: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

lines( ) function • 자체만으로는 그래프 생성 못하고 plot(x, y) 명령 후 사용됨.

• 디폴트: plot( ) plots the (x,y) points.

• plot( ) 의 type="n" option – 그래프에 점을 plotting 하지 않으면서 axes, titles 등을 만들어냄.

• only looks different from the type="b" option if the plotting of points is suppressed in the plot( ) command.

• 예: x <- c(1:5); y <- x # create some data

par(pch=22, col="red") # plotting symbol and color

par(mfrow=c(2,4)) # all plots on one page

opts = c("p","l","o","b","c","s","S","h")

for(i in 1:length(opts)){

heading = paste("type=",opts[i])

plot(x, y, type="n", main=heading)

lines(x, y, type=opts[i])

}

Page 110: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로
Page 111: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

plot( ) 에서의 type= options 의 예 x <- c(1:5); y <- x # create some data

par(pch=22, col="blue") # plotting symbol and color

par(mfrow=c(2,4)) # all plots on one page

opts = c("p","l","o","b","c","s","S","h")

for(i in 1:length(opts){

heading = paste("type=",opts[i])

plot(x, y, main=heading)

lines(x, y, type=opts[i])

}

Page 112: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

# Create Line Chart

Orange$Tree <- as.numeric(Orange$Tree) # factor numeric 변환

ntrees <- max(Orange$Tree)

xrange <- range(Orange$age) # x, y축의 범위

yrange <- range(Orange$circumference)

# set up the plot

plot(xrange, yrange, type="n", xlab="Age (days)",

ylab="Circumference (mm)" )

colors <- rainbow(ntrees)

linetype <- c(1:ntrees)

plotchar <- seq(18,18+ntrees,1)

# add lines

for (i in 1:ntrees) {

tree <- subset(Orange, Tree==i)

lines(tree$age, tree$circumference, type="b", lwd=1.5,

lty=linetype[i], col=colors[i], pch=plotchar[i])

Page 113: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로
Page 114: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

파이 차트

pie(x, labels=) x 는 non-negative numeric vector (각 slice의 면적표시)

labels= • 각 slice 이름의 문자 vector

# Simple Pie Chart

slices <- c(10, 12,4, 16, 8)

lbls <- c("US", "UK", "Australia", "Germany", "France")

pie(slices, labels = lbls, main="Pie Chart of Countries")

Page 115: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Pie 차트에서 백분율 표시 # Pie Chart with Percentages

slices <- c(10, 12, 4, 16, 8)

lbls <- c("US", "UK", "Australia", "Germany", "France")

pct <- round(slices/sum(slices)*100)

lbls <- paste(lbls, pct) # add percents to labels

lbls <- paste(lbls,"%",sep="") # ad % to labels

pie(slices,labels = lbls, col=rainbow(length(lbls)),

main="Pie Chart of Countries")

Page 116: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

3D Pie Chart plotrix package의 pie3D( ) function

• 3D exploded pie chart 출력 # 3D Exploded Pie Chart

library(plotrix)

slices <- c(10, 12, 4, 16, 8)

lbls <- c("US", "UK", "Australia", "Germany", "France")

pie3D(slices,labels=lbls,explode=0.1,

main="Pie Chart of Countries ")

Page 117: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Box Plot

상자 plot 각 변수별 또는 그룹별로 Boxplot 가능.

boxplot(x, data=) • x 는 formula, data= 에서 데이터프레임 지정

• formula 예 : y~group

• varwidth=TRUE 를 추가하면 폭이 제곱근에 비례

• horizontal=TRUE 를 추가하면 축 방향이 반대가 됨. # Boxplot of MPG by Car Cylinders

boxplot(mpg~cyl,data=mtcars, main="Car Milage Data",

xlab="Number of Cylinders", ylab="Miles Per Gallon")

Page 118: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로
Page 119: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

# Notched Boxplot of Tooth Growth Against 2 Crossed Factors

# boxes colored for ease of interpretation

boxplot(len~supp*dose, data=ToothGrowth, notch=TRUE,

col=(c("gold","darkgreen")),

main="Tooth Growth", xlab="Suppliment and Dose")

Page 120: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Violin Plots Boxplot과 kernel density plot의 혼합형태.

vioplot package의 vioplot( ) library(vioplot)

x1 <- mtcars$mpg[mtcars$cyl==4]

x2 <- mtcars$mpg[mtcars$cyl==6]

x3 <- mtcars$mpg[mtcars$cyl==8]

vioplot(x1,x2,x3,names=c("4 cyl", "6 cyl", "8 cyl"),col="gold")

title("Violin Plots of Miles Per Gallon")

Page 121: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Scatterplots

Scatterplot의 단순한 방식 plot(x, y)

• x, y는 numeric vector로서 plot할 점 (x,y)을 표시 attach(mtcars)

plot(wt, mpg, main="Scatterplot Example",

xlab="Car Weight ", ylab="Miles Per Gallon ", pch=19)

Page 122: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

# Add fit lines

abline(lm(mpg~wt), col="red") # regression line (y~x)

lines(lowess(wt,mpg), col="blue") # lowess line (x,y)

Page 123: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

car package의 scatterplot( ) 다양한 기능제공.

예: fit lines, marginal box plots, conditioning on a factor, and interactive point identification.

# Enhanced Scatterplot of MPG vs. Weight by no. of Car Cylinders

library(car)

scatterplot(mpg ~ wt | cyl, data=mtcars,

xlab="Weight of Car", ylab="Miles Per Gallon",

main="Enhanced Scatter Plot", labels=row.names(mtcars))

Page 124: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Scatterplot Matrices 예:

pairs(~mpg+disp+drat+wt,data=mtcars,

main="Simple Scatterplot Matrix")

Page 125: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

lattice package options to condition the scatterplot matrix on a factor.

# Scatterplot Matrices from the lattice Package

library(lattice)

splom(mtcars[c(1,3,5,6)], groups=cyl, data=mtcars,

panel=panel.superpose,

key=list(title="Three Cylinder Options", columns=3,

points=list(pch=super.sym$pch[1:3], col=super.sym$col[1:3]),

text=list(c("4 Cylinder","6 Cylinder","8 Cylinder"))))

Page 126: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로
Page 127: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

car package factor에 따라 scatterplot matrix 조절

선택적으로: • lowess 및 linear best fit lines, boxplot, densities, histograms in

the principal diagonal, rug plots in the margins of the cells. # car Package로 부터의 Scatterplot Matrix

library(car)

scatterplot.matrix(~mpg+disp+drat+wt|cyl,

data=mtcars,

main="Three Cylinder Options")

Page 128: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

gclus package options to rearrange the variables so that those with higher

correlations are closer to the principal diagonal. It can also color code the cells to reflect the size of the correlations.

# Scatterplot Matrices from the glus Package

library(gclus)

dta <- mtcars[c(1,3,5,6)] # get data

dta.r <- abs(cor(dta)) # get correlations

dta.col <- dmat.color(dta.r) # get colors

# 변수를 재배열해서 상관계수가 높은 것이 대각선에 가까워짐

dta.o <- order.single(dta.r)

cpairs(dta, dta.o, panel.colors=dta.col, gap=.5,

main="Variables Ordered and Colored by Correlation" )

Page 129: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로
Page 130: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

High Density Scatterplots The hexbin(x, y) function in the hexbin package provides

bivariate binning into hexagonal cells (it looks better than it sounds).

# High Density Scatterplot with Binning

library(hexbin)

x <- rnorm(1000)

y <- rnorm(1000)

bin<-hexbin(x, y, xbins=50)

plot(bin, main="Hexagonal Binning")

Page 131: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

sunflowerplot. # High Density Scatterplot with Color Transparency

pdf("c:/scatterplot.pdf")

x <- rnorm(1000)

y <- rnorm(1000)

plot(x,y, main="PDF Scatterplot Example",

col=rgb(0,100,0,50,maxColorValue=255), pch=16)

dev.off()

Page 132: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

3D Scatterplots scatterplot3d package의 scatterplot3d(x, y, z).

# 3D Scatterplot

library(scatterplot3d)

attach(mtcars)

scatterplot3d(wt,disp,mpg, main="3D Scatterplot")

Page 133: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

library(scatterplot3d)

attach(mtcars)

s3d <-scatterplot3d(wt,disp,mpg, pch=16, highlight.3d=TRUE,

type="h", main="3D Scatterplot")

fit <- lm(mpg ~ wt+disp)

s3d$plane3d(fit)

Page 134: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

R과 기초통계

Page 135: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

R과 기초통계 <목차>

기술통계 (記述統計)

빈도수와 Crosstabs

상관관계

t-tests

비모수 통계 (이하 생략)

회귀 진단

ANOVA/MANOVA

(M)ANOVA Assumptions

Resampling Stats

검정력분석

With와 By

Page 136: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

기술통계 (Descriptive Statistics)

= 요약통계 (summary statistics)

sapply( ) 함수 # mydata라는 데이터프레임에서의 변수 평균. 단, 결측치는 계산에서 제외

sapply(mydata, mean, na.rm=TRUE)

sapply 에 이용 가능한 함수: • mean, sd, var, min, max, median, range, and quantile.

기타의 함수 summary(mydata) # 평균, 중위값, 1사분위/3사분위, 최소, 최대

fivenum(x) # Tukey min,lower-hinge, median,upper-hinge,max

Page 137: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Hmisc package library(Hmisc)

describe(mydata)

# n, nmiss, unique, mean, 5,10,25,50,75,90,95th percentiles, …

pastecs package library(pastecs)

stat.desc(mydata) # nbr.val, nbr.null, nbr.na, min max, range,

# sum, median, mean, SE.mean, CI.mean, …

psych package library(psych)

describe(mydata) # item name ,item number, nvalid, mean, sd,

# median, mad, min, max, skew, kurtosis, se

Page 138: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Group별 summary 통계

psych package. library(psych)

describe.by(mydata, group,...)

doBy package model formula와 함수를 통해 원하는 테이블 지정

library(doBy)

summaryBy(mpg + wt ~ cyl + vs, data = mtcars,

FUN = function(x) { c(m = mean(x), s = sd(x)) } )

# produces mpg.m wt.m mpg.s wt.s for each

# combination of the levels of cyl and vs

Page 139: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

빈도수와 Crosstabs

빈도표 생성 table( ) frequency tables

prop.table( ) tables of proportions

margin.table( ) marginal frequencies # 2-Way Frequency Table (단, A, B, C 는 범주형 변수)

attach(mydata)

mytable <- table(A,B) # A will be rows, B will be columns

mytable # print table

margin.table(mytable, 1) # A frequencies (summed over B)

margin.table(mytable, 2) # B frequencies (summed over A)

prop.table(mytable) # cell percentages

prop.table(mytable, 1) # row percentages

prop.table(mytable, 2) # column percentages

Page 140: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

table( ) 을 이용해서 다차원 테이블을 생성.

ftable( ) 을 통해 출력을 고급화.

mytable <- table(A, B, C) # 3-Way Frequency Table

ftable(mytable)

Table은 결측치를 무시. NA를 category의 하나로 count에 포함하려면

• if (변수가 vector): table option으로 exclude=NULL

• if (변수=factor): newfactor <- factor(oldfactor, exclude=NULL)

(즉, 새로운 factor 생성)

Page 141: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

xtabs

xtabs( ) formula 형 입력을 통해 crosstabulations 생성 # 3-Way Frequency Table

mytable <- xtabs(~A+B+c, data=mydata)

ftable(mytable) # print table

summary(mytable) # chi-square test of indepedence

Formula의 왼쪽에 변수가 있는 경우 빈도 vector를 가정 (이미 tabulate처리된 경우 유용).

Page 142: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Crosstable

Page 143: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로
Page 144: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

로그 선형(Loglinear) 모델 MASS package의 loglm( )

예: A, B, and C.변수에 따른 3-way contingency table이 있다면: library(MASS)

mytable <- xtabs(~A+B+C, data=mydata)

다음과 같은 검정을 시행할 수 있다: • 상호적 (Mutual) 독립성: A, B, C가 pairwise independent. loglm(~A+B+C, mytable)

• Partial Independence: A is partially independent of B and C (즉, A is independent of the composite variable BC). loglin(~A+B+C+B*C, mytable)

• 조건적 (Conditional) 독립성: A is independent of B, given C. loglm(~A+B+C+A*C+B*C, mytable)

• No Three-Way Interaction loglm(~A+B+C+A*B+A*C+B*C, mytable)

Page 145: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

연관성 측도

연관성 척도 (Measures of Association)

vcd package의 assocstats(mytable) phi 계수, contingency 계수 및 Cramer's V 계산

vcd package의 kappa(mytable) 혼동 매트릭스 (confusion matrix)에 대한 Cohen's kappa 및

weighted kappa를 계산

Page 146: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

결과의 시각화 1차원: 빈도수 시각화를 위한 bar 차트 및 pie 차트

범주형 데이터간의 관계: vcd package 이용 • 예: mosaic 및 association plots

ca package를 이용한 correspondence 분석 • 분할표의 row와 column간 관계를 시각화하여 분석

빈도표를 "Original" Flat file로 변환 테이블을 데이터 프레임으로 되돌리는 코드 (Marc Schwartz)

Page 147: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

상관관계

cor( )

상관관계 cov( )

공분산

단순 포맷: cor(x, use=, method= ) 다음 표를 참조

Option Description

x Matrix 또는 data frame

use 결측치 처리방법. Options: all.obs (결측치 없는 것을 전제 – 결측치는 에러 발생), complete.obs (listwise deletion), pairwise.complete.obs (pairwise deletion)

method Specifies the type of correlation. Options: pearson, spearman, kendall.

Page 148: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

# mtcars의 수치 변수간 상관관계/공분산. 결측치는 listwise deletion

cor(mtcars, use="complete.obs", method="kendall")

cov(mtcars, use="complete.obs")

cor.test( ) test a single correlation coefficient neither cor( ) or cov( ) produce tests of significance,

Hmisc package의 rcorr( ) correlations/covariances and significance levels for pearson and spearman correlations. 단, 입력항목은 matrix이고 pairwise deletion 적용.

# Correlations with significance levels

library(Hmisc)

rcorr(x, type="pearson") # pearson 또는 spearman 타입

rcorr(as.matrix(mtcars)) # mtcars는 data frame

Page 149: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

cor(X, Y) 또는 rcorr(X, Y) column X와 column Y간의 상관관계 생상

# mtcars의 Correlation matrix

# rows: mpg, cyl, disp

# columns:hp, drat, wt

x <- mtcars[1:3]

y <- mtcars[4:6]

cor(x, y)

Page 150: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

기타의 Correlations # polychoric 상관계수 (x = counts의 분할표)

library(polycor)

polychor(x)

# 한 matrix 내의 이형변수간 상관계수 (heterogeneous correlations)

# pearson (numeric-numeric), polyserial (numeric-ordinal),

# polychoric (ordinal-ordinal)

# x는 ordered factor와 numeric 변수를 가지는 data frame

library(polycor)

hetcor(x)

# partial correlations

library(ggm)

data(mydata)

pcor(c("a", "b", "x", "y", "z"), var(mydata))

# partial corr between a and b controlling for x, y, z

Page 151: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

Correlation의 시각화 corrgram( )

• plot correlograms .

pairs() or splom( ) • scatterplot matrices.

Page 152: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

t-tests

t.test( ) 기본: unequal variance를 가정하고 Welsh 자유도 modification.

t.test(y~x) # y는 numeric, x는 binary factor

# independent 2-group t-test

t.test(y1,y2) # y1와 y2는 numeric

# paired t-test

t.test(y1,y2,paired=TRUE) # y1와 y2는 numeric

# one sample t-test

t.test(y,mu=3) # Ho: mu=3

var.equal = TRUE option • equal variances와 pooled variance 추정치를 지정

• 단측검증의 경우 alternative="less" or alternative="greater"

t-test 대신 비모수 (non-parametric)및 resampling도 가능

결과의 시각화 • 집단차이를 시각화하기 위해 box plot 또는 density plot 사용.

Page 153: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

맺음말

Page 154: 윤형기 (hky@ ) 초교육자료.pdf위/아래방향의 화살표 key를 통해 명령어 history기능을 ... 계산기 기능 > 5+4 > 7^2 ... • matrix 의 내용을 Column 우선으로

맺음말

수리/통계 분석도구로서의 R

프로그래밍 언어로서의 R

시각화 도구로서의 R

R의 미래