소프트웨어시스템실습 3강: R 프로그래밍 및 데이터 조작
조건문 문법 if(cond) { 문장} else {문장} ifelse(test, yes, no)
반복문 … … …
연산 수치연산
벡터 연산
벡터 연산
결측치(NA)의 처리
함수 정의 함수명 <- function(인자, 인자, ....) { 함수 본문 }
함수 반환 방법 return(반환값) # ()생략 불가능
함수 인자 지정 가변길이 인자
변수 scope 콘솔에서 변수를 선언하면 모든 곳에서 사용 가능 함수내부에서 선언 함수 내에서만 사용가능 서로 다른 변수
변수 scope rm(list=ls())는 모든 객체를 삭제하는 명령
Call by value
객체의 삭제 ls() 메모리 상에 만들어진 객체의 목록 객체 x를 삭제 모든 객체를 삭제
iris 데이터
iris 데이터 Species: Sepal.Width Sepal.Length Petal.Width Petal.Length 붓꽃의 종. setosa, versicolor, virginica의 세가지 값중 하나를 저장한 범주형 변수. Sepal.Width 꽃받침의 너비. Number 변수. Sepal.Length 꽃받침의 길이. Number 변수. Petal.Width 꽃잎의 너비. Number 변수. Petal.Length 꽃잎의 길이. Number 변수. 그 이외의 dataset을 보려면 library(help=datasets)
파일 입출력 CSV파일 read.csv(파일명, header=TRUE) #header가 있는 경우(default) eg) a.csv
파일 입출력 csv 파일에 헤더행이 없다면 다음과 같이 header=FALSE를 지정
파일 입출력 기본적으로 문자열은 모두 Factor형태로 변환 문자열로 사용하려면 재변화해야함 입력단계에서 문자열로 입력 받으려면
파일 입출력 NA 지정 문자열이 있을 경우 자료형이 제대로 설정안됨
파일 입출력
csv 파일로의 저장 row.names = T로 지정하면 행번호가 출력됨
객체의 파일 입출력 Binary 형태로 객체를 입출력
데이터 프레임의 행과 열 병합 rbind(), cbind() 행렬이나 데이터 프레임의 데이터 병합
데이터 프레임의 행과 열 병합 지정 안하면 name 컬럼은 Factor형이 되므로 a와 b이외에는 추가 못함
데이터 프레임의 행과 열 병합
데이터 프레임의 행과 열 병합 데이터 프레임에 새로운 열을 추가할 때는 cbind() 를 사용하지 않고 ‘변수명$컬럼명 <-데이터’ 형태로도 열을 추가할 수 있음
Apply 계열함수들
apply() apply(행렬, 방향,함수) #벡터에는 적용 안됨 ‘방향’은 1이 주어지면 행, 2가 주어지면 열
apply() 자주 사용하므로 rowSums(), colSums() 함수가 정의되어 있음 rowMeans() 또는 colMeans()도 사용 가능
apply() 주의 최소 2columns 이상만 적용 가능 apply ( iris [, 1] , 2, sum )나 colSums ( iris [, 1]) 같이 1 column은 사용 못함 최소 2columns 이상만 적용 가능 벡터 형태이므로 이 경우는 sum( iris [, 1] )과 같이sum을 이용해야 함
lapply() lapply(X, 함수) ‘X’는 벡터 또는 리스트, 데이터 프레임 등 가능 결과는 list 형태 예) 입력이 벡터 형태 리스트를 벡터로 변환
lapply() 입력이 리스트 형태
lapply() 입력이 프레임 형태 colMeans로도 계산 가능
lapply() lapply()로 데이터 프레임을 처리한 결과는 리스트임 리스트를 데이터 프레임으로 변환 방법 unlist()로 벡터로 변환 matrix()로 1 X 4 matrix로 변환 (생략하면 1 column으로 변환됨) 벡터를 직접 데이터 프레임으로 바꾸면 1column 프레임으로 변환됨 as.data.frame()으로 데이터 프레임으로 변환
lapply() 데이터 프레임으로 바꾸는 다른 방법 do.call()을 이용 lapply의 결과인 리스트를 cbind의 인자로 넣어 결과를 얻음 결과는 list 각 요소가 column으로 결합된 matrix 형태
sapply() lapply()와 유사하지만 리스트대신 행렬, 벡터 등으로 결과를 반환 입력: 벡터, 리스트, 데이터 프레임 등 결과는 벡터
sapply() 데이터 프레임으로 변환 t(x)를 사용해 벡터의 행과 열을 바꿔주지 않으면 기대한 것과 다른 모양의 데이터 프레임을 얻게 됨 아래의 예에서 x는 vector임. t(x)를 실행하면 1 X 4의 matrix가 생성됨
sapply() 결과가 matrix인 sapply의 예
tapply 그룹별 처리를 위한 apply 함수 tapply(데이터, 색인, 함수) 예) 1부터 10까지의 숫자가있고 이들이 모두 한 그룹에 속해있을때 각 그룹에 속한 데이터의 합 예) 짝수, 홀수별 합 iris데이터에서 Species별 Sepal.Length의 평균
tapply 반기별 남성 셀의 합과 여성 셀의 합
summary
order 데이터를 정렬하기 위한 순서를 반환 정렬 여러 개의 정렬기준 iris [ order ( iris $ Sepal.Width, iris $ Sepal.Length) ,]
데이터 분리(split, subset) split(데이터, 분리조건) 결과는 분리된 데이터가 저장된 리스트
데이터 분리(split, subset) 위 결과에 lapply()를 적용해서 iris의 종별 Sepal.Length의 평균을 구할 수 있음
데이터 분리(split, subset) subset 조건에 맞는 특정 부분만 찾음 벡터간 연산이므로 &&가 아님
데이터 분리(split, subset) 특정 열을 선택: select 인자로 지정
데이터 병합(merge) Database의 조인과 같음 cbind는 단순 결합
공통된 이름이 없는 경우에는 한쪽에 데이터가 없게 되는데 이 경우 값을 NA로 채우면서 전체 데이터를 모두 합치려면 다음과 같이 all 인자에 TRUE를 지정
정렬(sort, order) sort() order() 벡터를 정렬 정렬하기 위한 색인(순서)을 반환 큰 수부터 정렬하려면 x대신에 –x를 사용하여 음수로 만듦
with, within with(data, expression)
with, within within: 데이터 수정에 사용 예는 다음 페이지
생략하면 결과가 NA로 나옴 동일한 기능
attach, detach attach는 인자로 주어진 데이터 프레임이나 리스트를 곧바로 접근. 해제는 detach
attach, detach 주의: attach()한 변수값은 detach()시 원래의 데이터 프레임에는 반영되지 않음
조건에 맞는 데이터 색인 찾기 조건에 맞는 값 자체를 찾을 때는 subset이나 조건문 지정 … …
조건에 맞는 데이터 색인 찾기 which: 조건에 맞는 색인(위치) 찾기