소프트웨어시스템실습 2강: R 데이터 타입
기초 데이터 타입: 스칼라 Scala integer: 정수 numeric: 실수 character: 문자열 logical: 논리형(부울형) complex: 복소수
Variables 사용가능 예 불가능 예 또 다른 예 변수값 할당 data.training data.validation <- <<- = 대부분 <-를 사용
Scala 숫자 NA 값이 존재하지 않음
Scala NULL 변수가 초기화 되지 않은 경우 결측치(NA)와 구분
Scala 문자열 진리값 ‘this is string’ 또는 “this is string” TRUE, T FALSE, F & (AND), | (OR), ! (NOT) 연산자 사용가능
Scala 진리값 AND나 OR연산자에는 &, | 외에도 &&와 || 가 있다. &, |는 boolean이 저장된 벡터(Vector) 끼리의 연산시 각 원소간 계산을 할 때 사용 &&와 ||는 for나 if문 등에서 개별 값의 논리값을 계산할 때 사용
Scala 팩터(factor) – 범주형 데이터 factor(data, levels) factor(data)
Scala factor level 수정 순서가 있는 factor eg) 나쁨 < 조금 나쁨< 보통< 조금 좋음< 아주 좋음
복합 데이터 구조 타입 벡터(vector) 행렬(matrix) 데이터 프레임(data frame) 리스트(list)
복합 데이터 구조 타입
Vectors Vectors c(…) function Sequence operator Operations on two vectors c(0,1,1,2,3,5,8) 1:50 c(1,2,3,4)+c(10,20,30,40) c(1,2,3,4)*c(10,20,30,40) c(1,2,3,4)+c(1,1,1,1)
Vectors c(1,2,3,4)+1 1/c(1,2,3,4,5) c(1,2,3,4)+c(10,100)
Vectors Expressions with characters: character vector Character in R == String in C language “Hello world.” : length = 1 : length = 2 c(“Hello world”, “Hello R interpreter”)
Vectors Assignment: using <- or = 방향 표현 가능 x<-1 3->three y<-2 three z<-c(x,y) z y<-4 z
Vectors Reference to a set of members of a vector Specifying indices b<-c(1,2,3,4,5,6,7,8,9,10,11,12) b b[7] b[1:6] b[b%%3==0] b[1:6] Specifying indices b[c(1,6,11)]
Vectors Fetching only multiples of 3 b%%3==0 b[b%%3==0]
Vectors 배열과 유사 한가지 타입의 데이터가 순서대로 저장
Vectors 각 원소에 이름 부여 가능
Vectors 특정요소 제외
Vectors
Vectors
Vectors
Array Array An array object is just a vector that’s associated with a dimension attribute a <- array(c(1,2,3,4,5,6,7,8,9,10,11,12), dim=c(3,4)) a a[1,2] a[1,] a[1:2,1:2] a[,1] a[1:2,] a[c(1,3),]
Array A matrix is just a 2-dimensional array Arrays can have more than 2 dimensions m<-matrix(data=c(1,2,3,4,5,6,7,8,9,10,11,12), nrow=3, ncol=4) m w<-array(c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18),dim=c(3,3,2) w w[1,1,1]
Matrix 2차원 벡터 원소의 타입이 동일 데이터 형
Matrix 행과 열에 이름 부여
Matrix 행과 열 이름을 별도로 부여
Matrix 행과 열 번호로 접근 1번부터 시작함
Matrix
Matrix 행과 열 이름으로 접근 x[ x[, “features”] >= 5 ,] 두 번째 컬럼의 값이 5보다 큰 행을 출력
Matrix
Matrix 전치행렬
Matrix 행과 열의 개수 구하기
List Lists 다른 유형의 객체를 포함할 수 있으며, 각 성분에 명칭을 부여할 수 있음 component g<-list(“this list references another list”, e) e<-list(thing=“hat”, size=“8.25”) g e e$thing e[1] component list 내부에 list 요소가 있음 [ “this...” , [ ] ] e[[1]]
List (키, 값) 형태의 데이터 서로 다른 데이터 타입저장 가능
List 리스트 내의 리스트
List 방법 : x$key x[n] x[[n]] 결과는 리스트, 즉, 1개의 원소를 갖는 서브리스트 반환
Data Frame R에서 가장 중요한 자료형 Database의 테이블과 같은 형태를 가짐 다른 방법 a <- c(…) b <- c(…) d <- data.frame(a, b)
Data Frame data.frame a list that contains multiple named vectors that are the same length data.frame 컴포넌트의 참조 data.frame 데이터 연산 teams<-c(“PHI”, ”NYM”, ”FLA”, ”ATL”, ”WSN”) w<-c(92, 89, 94, 72, 59) l<-c(70, 73, 77, 90, 102) nleast<-data.frame(teams, w, l ) nleast nleast[ , “w”] nleast[ , 2] nleast$w nleast$teams ==“FLA” nleast$l[nleast$teams==“FLA”]
Data Frame Factor 형태의 z 열이 추가된 예이다
Data Frame z는 문자열 형태
Data Frame 컬럼 추가
Data Frame 컬럼명 지정 x column이 3보다 큰 행을 출력 d[d$x >3, ]
Data Frame 한 컬럼만 선택시 벡터처럼 출력됨. 이를 피하려면
Data Frame 데이터 프레임의 행 이름, 열 이름은 각각 rownames(), colnames() 함수로 지정 행과 열이름 부여 colnames(x) <- c(‘val’) rownames(x) <- c(‘a’, ‘b’, ‘c’)
Data Frame 엑셀형태로의 출력 view(x)
Functions Function 도 역시 하나의 객체로서 특정 변수에 할당 함수 호출하는 방법에 주목 !!! f<-function(x,y){c(x+1,y+1)} f(1,2) 함수도 하나의 객체 !!! 그 내용을 보기 위해서 해당 변수를 입력함 f
Functions function의 형태 예: exp(1) log(x=64, base=4) log(64,4) cos(3.141593) log2(1) 17+2 2^10 3==4
Function 객체 Call-By-Values f <- function(x,i) {x[i]=4} w<-c(10,11,12,13) f(w,1) 벡터 w 가 변수 x에 copy가 될 뿐, 연결되어 있지 않음 w
함수 호출시 인자지정 예) 정의: foo(a, b, c=1, d=1) c와 d는 호출시 생략 가능하고 default값이 지정됨 순서 무시 가능 foo(d=5, a=3, b=4)
Special Values NA: “Not Available” Inf, -Inf NaN: “Not a Number” length(v)<-4 v<-c(1,2,3) v v 2^1024 1/0 -2^1024 Inf-Inf 0/0
Type 변환 자동 type 변환 x<-c(1,2,3,4,5) x[2]<- “hat” typeof(x) 모든 요소가 character로 변환 x<-c(1,2,3,4,5) x[2]<- “hat” x x typeof(x) typeof(x) class(x) class(x)
Indexing 정수형 벡터를 이용한 indexing v<-100:119 v[5] v[1:5] v[c(1,6,11,16)] v[-15:-1] # v[-1:-15] 삭제한 벡터를 출력, 하지만 v의 값이 변한 것은 아님 => 변한 결과를 보존하려면, 새로운 변수에 할당
Indexing 리스트 성분의 삭제 l<-list(a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9,j=10) l[1:3] l[-7:-1]
Indexing 아래를 비교해보자 > m[3] > m[3, ] > m[, 3] m m <- matrix(data=c(101:112), nrow=3,ncol=4) 아래를 비교해보자 > m[3] > m[3, ] > m[, 3] m m[3] # 3번째 요소를 출력 m[3,4] m[1:2, ] m[1:2, 1:2] m[3:4] m[, 3:4] m[1] <- 1000 m m m[1:2,1:2] <- matrix(c(1001:1004), nrow=2,ncol=2) m
Indexing 논리(진리)값의 의한 indexing (for vectors and lists) v<-100:119 rep(c(TRUE,FALSE), 10) v[rep(c(TRUE,FALSE), 10)] v[(v == 103)] 논리형 벡터가 생성 v[(v%%3 == 0)] l[(l>7)] l <- list(a=1, b=2, c=3, d=4, e=5, f=6, g=7, h=8, i=9, j=10) l[1:3]
타입판별 is.factor() is.character() is.data.frame() 등
타입변환 행렬이나 리스트를 데이터 프레임으로 변환 예
타입변환(as.xxx) 기타 as.character() as.matrix() as.data.frame() 알파벳 순서로 지정됨 순서를 m, f로 강제 지정