r 기본-데이타형 소개

15
R 의 의의 의 의의 의의의 의 R 프프프프프 프프 #1 2014.11.11 프프프 http://bcho.tistory.com

Upload: terry-cho

Post on 29-Jun-2015

11.910 views

Category:

Data & Analytics


2 download

DESCRIPTION

R에 대한 설명. 첫번째로 R 설치법과 데이타 형에 대한 소개

TRANSCRIPT

Page 1: R 기본-데이타형 소개

R 의 설치 및 기본 데이타 형R 프로그래밍 기초 #1

2014.11.11 조대협 http://bcho.tistory.com

Page 2: R 기본-데이타형 소개

R 설치 및 환경• BLAS( Basic Linear Algebra System)

– 리눅스에는 행렬과 , 벡터의 내적과 선형 대수 연산을 수행하기 위한 라이브러리– Reference implementation ( 구현체에 따라 성능 차이가 많이남 )

• libblas• ATLAS implementation (libatlas)• OpenBLAS implementation (libopenblas)

• R Benchmark 를 이용하여 라이브러리 성능 측정• R 개발 환경

– R Studio (vi 에디터 , emacs 에디터 형 플러그인 有 )

Page 3: R 기본-데이타형 소개

패키지관리• CRAN 을 이용하여 , 패키지 설치 가능• R 스튜디오 “ Packages” 메뉴에서 관리 가능 ( 설치 , 목록보기 , 삭제등 )

명령 예제 설명

install.package(“패키지명” ,dependency)

install.package(“benchmark”,TRUE);

dependency = [NA|TRUE|FALSE]TRUE 이면 , 의존성 있는 패키지가 함께 설치됨

update.pack-ages(ask=TRUE);

현재 설치되어 있는 패키지중에 업데이트가 있으면 설치한다 .ask=FALSE 이면 , 물어보지 않고 모든 패키지를 최신 버전으로 업데이트 한다 .

library(“ 패키지명” ,help)

패키지를 로드하여 사용할 준비를 한다 . cf. Import

Page 4: R 기본-데이타형 소개

변수 및 함수 인자 정의• 변수

– 변수명• 알파벳 또는 “ .” 으로 시작해야 한다 .• 알파벳 , 숫자 , “_”, “.” 사용 가능

※ “-” 는 사용 불가능함 . – 변수값 할당

• `=` 또는 <-, <<- 사용

• 함수 인자 정의

foo(a,b,c=3,d=4)

• foo(1,2) : a=1,b=2,c=3,d=4• foo(1,2,99) : a=1,b=2,c=99,d=4• foo(10,20,30,a=99) : a=99,b=10,c=20,d=30

Page 5: R 기본-데이타형 소개

스칼라• 단일 차원의 값 (1 차원 값 )• NA : “ 데이타 값이 없음” 을 표현 . is.na(x) 로 체크 cf. NULL• NULL : “ 변수가 초기화 되지 않음”• 문자열 : char 와 같은 단일 문자타입은 없음 . 문자열을 ‘’또는 “”로 묶는다• 진리값 : TRUE,FALSE 로 표현

– &(AND),|(OR),!(NOT) 연산자 사용 가능 벡터의 요소별 연산 c(TRUE,TRUE) & c(TRUE,FALSE) = TRUE,FALSE

– &&, || ( 두개의 요소 연산 )

Page 6: R 기본-데이타형 소개

팩터• 범주형 데이타 (cf. Enumeration)

– 명목형 (Nominal)– 순서형 (Ordinal)

factor(“ 이름” ,” 값의 레벨” , 순서여부 디폴트는 FALSE)ex) sex<-factor(“m”,c(“male”,”female”)

명령 예제 설명

nlevel(x) nlevel(sex) 팩터의 레벨 개수

levels(x)

levels(sex)levels(sex)<-c(“m”, “f”) 레벨값 변경levels(sex)[1]levels(sex)[2]

팩터의 레벨값을 리턴함

is.factor(x) is.factor(sex) 해당 변수가 팩터인지 리턴

ordered(“ 이름” , “ 값의레벨” )> s <- ordered("a",c("a","b","c")) > s [1] a Levels: a < b < c

순서형 팩터 생성

is.ordered(x)

Page 7: R 기본-데이타형 소개

벡터• 일종의 배열의 개념으로 다음과 같은 특성이 있음

– 슬라이스 : 배열의 일부를 잘라낸 뒤 , 이를 또 배열 처럼 사용 가능– 셀에 이름 바구 가능

• 선언 : c( 값 1, 값 2, 값 3)

명령 예제 설명

c(“ 값 1”,” 값 2”,…”); x<-c(1,2,3) 벡터 생성

names(x) c(“ 이름 1”,” 이름 2”,…) names(x) <- c(“c1”, “c2”, “c3”); 각 셀에 이름을 지정함

names(x) names(x) 각 셀의 이름을 리턴함

x[n] x[2] N 번째 요소를 리턴

x[-n] x[-2] N 번째 요소를 제외하고 리턴

x[“ 셀이름” ] x[“c1”] “ 셀이름”으로 지정된 벤터의 요소를 반환

x[start:end] x[1:3] 벡터의 start~end 까지 요소을 반환

length(x) 벡터의 길이

nrow(x) 행렬에만 사용 가능

NROW(x) 벡터와 행렬 모두 사용 가능

※ 벡터의 요소는 1 부터 시작함 x[1]※ 벡터는 열벡터를 사용함

열벡터 c : 한열로 m*1 행렬행벡터 r: 한행으로 된 1*n 행렬

Page 8: R 기본-데이타형 소개

벡터의 연산명령 예제 설명

identical(x,y) - 두 벡터가 동일한지 비교

union(x,y)

> x c1 c2 c3 c4 c5 1 2 3 4 5 > y [1] -1 4 5 6 > union(x,y); [1] 1 2 3 4 5 -1 6

합집합x 에만 있는 값이 먼저 들어가고 , 그 다음 x,y 에 공통적으로 있는 값 , 그리고 y 에만 있는 값 순으로 합쳐짐

intersect(x,y) - 교집합

setdiff(x,y) - 차집합

setequal(x,y)> a<-c(1,1,2,3); > b<-c(1,2,3); > identical(a,b); [1] FALSE > setequal(a,b); [1] TRUE

벡터를 집합으로 ( 중복제거 ) 취급하여 비교

value %in%x > 1 %in% x [1] TRUE 벡터 x 에 “ value” 가 저장되어 있는지 판단

x+n> x c1 c2 c3 c4 c5 1 2 3 4 5 > x+1 c1 c2 c3 c4 c5

벡터의 각 요소에 n 을 더함※ 마찬가지로 *,/,-,= 연산자 사용 가능

연속된 숫자로 구성된 벡터seq(from,to,by)

> z<-seq(1,10,2) > z [1] 1 3 5 7 9

from~to 까지 by 씩 증가하는 벡터 생성※ by 는 생략하면 11 씩 증가하는 경우 간단하게 x<-3:7 ,x<-7:3 식으로 “ seq” 생략 가능

반복된 값을 저장한 벡터rep(x,times,each)

> rep(1:2,times=5); [1] 1 2 1 2 1 2 1 2 1 2 > rep(1:2,each=5) [1] 1 1 1 1 1 2 2 2 2 2 > rep(1:2,each=5,times=2) [1] 1 1 1 1 1 2 2 2 2 2 1 1 1 1 1 2 2 2 2 2

x 벡터를 times 횟수 만큼 반복 . 반복시 each 횟수 만큼 개별 요소를 반복

Page 9: R 기본-데이타형 소개

리스트• 자바의 해시 테이블과 유사 (key,value)

x list(key=value,key=value…)

> x <-list(name='terry',age=100) > x $name [1] "terry" $age [1] 100 > x['name'] $name [1] "terry" > x$age$age [1] 100

• 리스트 안에 , 리스트를 넣는 중첩형 리스트 지원

명령 예제 설명

x$key x$age > 100 리스트 x 에서 key 에 해당 하는 값

x[n] x[1] > $name,[1] “terry” 리스트 x 에서 n 번째 key,value 값

x[[n]] x[[1]] > [1] “terry” 리스트 x 에서 n 번째 value 값

> c<-list(a=list(val=c(1,2,3)),b=list(val=c(1,2,3,4))); > c $a $a$val [1] 1 2 3 $b $b$val [1] 1 2 3 4

Page 10: R 기본-데이타형 소개

행렬• 행렬 생성

matrix( data, nrow= 행수 ,ncol= 컬럼수 ,byrow=FALSE,dmnames=NULL)

• data : 행렬에 들어갈 데이타• nrow : 행렬의 행수• ncol: 행렬의 컬럼 수• byrow : 값을 로우 우선으로 넣음 . (FALSE 이면 , 행렬을 세로로 먼저 채움 , TRUE 이면 가로로 먼저 채움 )• dmnames 각차원에 대한 이름

matrix(c(1,2,3,4,5,6,7,8,9),nrow=3) [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9

> matrix(c(1,2,3,4,5,6,7,8,9),nrow=3,byrow=TRUE) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9

matrix(1:9,nrow=3,dimnames=list(c("r1","r2","r3"),c("c1","c2","c3")))

c1 c2 c3 r1 1 4 7 r2 2 5 8 r3 3 6 9

Page 11: R 기본-데이타형 소개

행렬• 행렬 함수

명령 예제 설명

A[i,j] 행렬 A 의 i,j 원소

A[1:3,] 행렬 1~3 열

A[-2,] 행렬에서 2 열을 제외한값

A[,1:2] 행렬에서 1,2 컬럼의 값

A+x 행렬의 모든 원소에 스칼라 x 를 더한다

A+B 행렬 A 와 B 의 합

A %*% B 행렬 A 와 B 의 곱

t(A) 전치행렬 (transposed matrix)

solve(a,b)행렬 a* 행렬 x = 행렬 b 에서 , 행렬 x 를 구한다 . ( 다차 방정식을 풀때 사용 )

solve(x) x 의 역행렬 ( 역행렬 *

dim(x) 행렬 x 의 차원수

nrow(x) 행렬 x 의 행수

ncol(x) 행렬 x 의 열수

det(x) 행렬 x 의 행렬식 (determinant)

전치행렬

Page 12: R 기본-데이타형 소개

배열• 행렬이 2 차원 데이타라면 , 배열은 다차원 데이타

array( 데이타 , dim=length(data),dimnames=NULL)

• 데이타 : 배열의 데이타• dim : 행렬의 차원 , ex) dim=c(3,4) 3x4 배열 dim=c(2,2,3) 2x2x3 배열※ 배열은 세로 ( 열 ) 부터 채워짐

a = array(1:12,dim=c(3,4)) > a [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12

명령 예제 설명

A[i,j] 배열의 i,j 원소

A[1:10,] 배열의 1:10 열

Page 13: R 기본-데이타형 소개

데이타 프레임• 데이타 프레임은 일종의 액셀의 스프레드시트와 같이 데이타를 정리하는 타입• 각 컬럼의 ROW 수가 같아야 함

data.frame( 컬럼명 = 데이타 , 컬럼명 = 데이타 :); f <- data.frame( x=1:9, y=11:19)

> f x y 1 1 11 2 2 12 3 3 13 4 4 14 5 5 15 6 6 16 7 7 17 8 8 18 9 9 19 > f <- data.frame( x=1:9, y=11:30) Error in data.frame(x = 1:9, y = 11:30) : arguments

imply differing number of rows: 9, 20

Page 14: R 기본-데이타형 소개

데이타 프레임명령 예제 설명

f$colname 데이타프레임 f 에서 colname 으로 된 컬럼의 데이타 리턴

f$colname<-y 데이타 프레임 f 에서 colname 으로 된 컬럼의 값을 y 로 세팅

str(f) 데이타 프레임 f 의 구조를 리턴

f[i,j,drop=false]f[,c(“x”)] 컬럼명이 x 인 컬럼만f[,names(f) %in% c(“b”,”c”)] b,c 컬럼만 선택f[,!names(f) %in% c(“a”)]컬럼명이 a 인것만 빼고

데이타 프레임 i 열 ,j 값drop=FALSE 이면 , 데이타들만을 리턴drop=TRUE 이면 , 데이타 프레임형 데이타 형으로 리턴

head(x,n=6L) head(x) 처음 6 항만 리턴함 ( 디폴트가 6 항 ) 데이타 프레임 x 에서 처음 N 항을 리턴

tail(x,n=6L) tail(x) 마지막 6 항만을 리턴함 ( 디폴트가 6 항 ) 데이타 프레임 x 에서 마지막 N 항을 리턴함

View(f)※ 대소문자주의

데이타 프레임 f 를 뷰 윈도우로 보여줌 ( 윈도우 창을 띄워줌 )( 편집은 안되더라 )

class(f[1:10,1]) [1] "integer" > class(f[1:10,1,FALSE]) [1] "data.frame"

Page 15: R 기본-데이타형 소개

타입 판별 및 변환• 타입 판별

– class(x) : 객체 x 의 클래스 반환– str(x) : 객체 x 내부의 데이타 구조– is.factor(x),is.numeric(x),is.character(x) : 문자열인지 판

단 ,is.matrix(x),is.array(x),is.data.frame(x)

• 타입 변환– as.factor(x) : x 를 factor 형으로 변환– as.numerix(x),as.character(x),as.matrix(x),as.array(x),as.data.frame(x)