데이터 분석 환경, 데이터 분석 도구 R의 특성을 알아보자.
그리고 R을 설치하고, GUI를 알아보고 R Studio를 설치하고 GUI를 알아보자!
데이터 분석
을 위한 분석 도구
: SPSS
, SAS
, R
, Python
, Stata
등
R의 탄생
R
: 오픈소스 프로그램
, 통계/데이터마이닝
과 그래프
를 위한 언어통계분석
과 마이닝
기능 제공예제
공유패키지
가 수시로 업데이트분석도구의 비교
SAS | SPSS | 오픈소스 R | |
---|---|---|---|
프로그램 비용 | 유료, 고가 | 유료, 고가 | 오픈소스 |
설치용량 | 대용량 | 대용량 | 모듈화로 간단 |
다양한 모듈 지원 및 비용 | 별도구매 | 별도구매 | 오픈소스 |
최근 알고리즘 및 기술반영 | 느림 | 다소느림 | 매우빠름 |
학습자료 입수의 편의성 | 유료 도서 위주 | 유료 도서 위주 | 공개 논문 및 자료 많음 |
질의를 위한 공개 커뮤니티 | NA | NA | 매우 활발 |
R의 특징
오픈소스 프로그램
사용자 커뮤니티
에 도움
요청이 쉬움많은 패키지
가 수시로 업데이트그래픽
및 성능
프로그래밍
이나 그래픽
측면 등 대부분의 주요 특징들에서 상용 프로그램과 대등
하거나 월등
시스템 데이터 저장 방식
세션 사이
마다 시스템
에 데이터셋
을 저장하므로 매번 데이터를 로딩할 필요가 없
고 명령어 스토리도 저장
가능모든 운영체제
표준 플랫폼
S 통계 언어
기반 구현R/S 플랫폼
은 통계전문가들의 사실상의 표준 플랫폼객체지향언어
이며 함수형 언어
통계 기능
뿐만 아니라 일반 프로그래밍 언어처럼 자동화
하거나 새로운 함수
를 생성하여 사용 가능객체지향 언어 특징
SAS, SPSS
에서 회귀분석 시 화면에 결과가 산더미로 나옴추가
로 프로그래밍 하거나 별도 작업 필요R
은 추정계수, 표준오차, 잔차 등 결과값을 객체
에 저장하여 필요한 부분 호출 가능함수형 언어 특징
깔끔
하고 단축
된 코드빠른 코드 수행 속도
디버깅 노력 감소
병렬 프로그래밍
으로의 전환 용이R Studio
오픈소스
운영체제
지원변수
가 어떻게 되어 있는지와 타입
이 무엇인지 볼 수 있음스크립트
관리 및 도큐먼테이션
편리코딩
을 해야하는 부담이 있으나 스크립트용 프로그래밍
으로 어렵지 않게 자동화
가능래틀(Rattle)-무료 마이닝 툴
은 GUI가 패키지와 긴밀하게 결합돼 정해진 기능만 사용 가능해 업그레이드가 제대로 되지 않으면 통합성
에 문제 발생R기반 작업환경
업무 규모
와 본인
에게 익숙한 환경
이 무엇인지를 기준으로 선택R의 메모리
R Studio 구성화면
R GUI의 화면구성
패키지(Package)
패키지란?
R함수
와 데이터
및 컴파일된 코드
의 모임패키지 불러들이기
하드디스크
: R 설치
또는 업데이트
를 통해 설치웹
: CRAN 저장소
에 약 5000개의 유용한 패키지 자동 설치 install.packages("AID")
install.packages("AID","D:\\R\\R-4.3.1\\library") #수동설치
패키지 도움말
library(help=AID) #다운로드 된 AID 패키지의 help 다큐먼트 보여줌
help(package=AID) #웹을 통해 AID 패키지의 다큐먼트 보여줌
?함수
RSiteSearch("함수명")
프로그램 파일 실행
스크립트로 프로그래밍 된 파일 실행
source("파일명")
#한 줄 실행 : Ctrl+R
#여러줄 실행 : 드래그 후 Ctrl+R
#주석 처리 : #
프로그램 파일
sink 함수
- R코드 실행 결과를 특정 파일에서 출력
sink(file, append, split)
# file : 출력할 파일명(디렉터리 포함/디폴트 디렉터리)
# append : 파일에 결과를 덮어쓰거나 추가해서 출력(디폴트 값(false)는 덮어쓰기)
# split : 출력파일에만 출력하거나 콘솔창에 출력(디폴트 값(false)는 파일에만 실행 결과 출력)
#ex
sink("a_out.pdf")
sink("d:/study/r/a_out.pdf")
pdf 함수
-그래픽 출력을 pdf파일로 지정
pdf("a_out.pdf")
pdf("d:/study/r/a_out.pdf")
파일 닫기 함수
dev.off()
배치모드 기능
배치모드
: 사용자와 인터렉션이 필요하지 않는 방식
.
매일 돌아가야 하는 시스템
에서 프로세스를 자동화
할 때 유용
배치파일 실행 명령-DOS창
$R CMD BATCH batch.R
Path
지정
: 환경변수
에서 변수명 path
를 찾아 r프로그램
의 실행파일 위치
추가
배치파일 실행-batch.R 위치에서
R CMD BATCH batch.R
R 데이터 유형
과 객체
기능 | R코드 |
---|---|
숫자(Number) | integer, double |
논리값(Logical) | True(T), False(F) |
문자(Character) | "a","abc" |
출력하기
print() #출력형식을 지정할 필요 없음. 한번에 하나의 객체만 출력
cat() # 여러 항목을 묶어서 연결된 결과로 출력. 복합적 데이터 구조(행렬, list) 출력 불가
#ex
print(a)
cat("a","b","c")
# a b c
변수에 값 할당하기(대입 연산자)
<-
<<-
=
->
변수 목록보기
ls()
# "hi"
ls.str()
# hi : num[1:3] 1 2 3
변수 삭제하기
rm()
rm(list=ls()) #모든 변수 삭제시 사용
벡터 생성하기
c()
#벡터 원소 중 하나라도 문자가 있으면 모든 원소의 모드는 문자 형태로 변환
R 함수 정의하기
function(매개변수1, 매개변수2 ,..., 매개변수 n){
expr 1,
expr 2, ...,
expr m
}
#expr 특징
#지역변수 : 단순히 값을 대입하기만 하면 지역변수로 생성, 함수 종료시 지역변수 삭제
#조건부 실행 : if문
#반복 실행 : for, while repeat 문
#전역변수 : <<-를 사용하여 지정 가능하나 추천X
데이터 할당
a<-1
a=1
화면 프린트
a
print(a)
결합
c 함수
는 문자, 숫자, 논리값, 변수
를 모두 결합 가능하며 벡터
와 데이터셋
생성 가능수열
콜론(:)
, seq함수
를 사용하여 시작값
에서 최종값
까지 연속적인 숫자 생성seq함수
는 간격과 결과값의 길이 제한
가능seq(from=0, to=20, by=2) # 시작, 끝, 간격
seq(from=0,to=20,length.out=5) #결과가 5개 나오도록
반복
rep함수
는 숫자나 변수의 값들을 time인자에 지정한 횟수만큼 반복
rep(1,time=5) #5번 출력
rep(1:4, each=2) # 1~4를 각각 2개씩 출력
문자 붙이기
paste 함수
는 문자열을 sep인자
에 지정한 구분자
로 연결문자열 추출
substr(문자열, 시작점, 끝점)
함수는 문자열
의 특정부분
을 추출 가능처음 시작
은 1
논리값
논리 연산자
같다
: ==같지 않다
: !=작다, 작거나 같다
: <, <=크다, 크거나 같다
: >, >=벡터의 원소 선택하기
V[n]
: 선택하고자 하는 자리수V[-n]
: 제외하고자 하는 자리수n
: 원소의 자리수
V
: 벡터 이름
연산자 우선순위 | 뜻 | 표현방법 |
---|---|---|
[ [[ | 인덱스 | a[1] |
$ | 요소 뽑아내기, 슬롯 뽑아내기 | a$coef |
^ | 지수 | 5^2 |
- + | 단항 마이너스, 플러스 부호 | -3, +5 |
: | 수열 생성 | 1:10 |
%any% | 특수 연산자 | %/% : 나눗셈 몫 %% : 나눗셈 나머지 %*% : 행렬 곱 |
* / | 곱하기, 나누기 | 3*5, 3/5 |
+ - | 더하기, 빼기 | 3+5 |
== != <> <= >= | 비교 | 3==5 |
! | 논리 부정 | !(3==5) |
& | 논리 and, 단축 and | TRUE & TRUE |
| | 논리 or, 단축 or | TRUE|TRUE |
~ | 식(formula) | lm(log(brain)~log(body),data=Animals) |
-> ->> | 대입(왼쪽을 오른쪽으로) | 3->a |
= | 대입(오른쪽을 왼쪽으로) | a=3 |
<- <<- | 대입(오른쪽을 왼쪽으로) | a<-3 |
? | 도움말 | ?lm |
기능 | R코드 | 비고 |
---|---|---|
평균 | mean(변수) | 변수의 평균 |
합계 | sum(변수) | 변수의 합계 |
중앙값 | median(변수) | 변수의 중앙값 |
로그 | log(변수) | 변수의 로그값 |
표준편차 | sd(변수) | 변수의 표준편차 |
분산 | var(변수) | 변수의 분산 |
공분산 | cov(변수1, 변수2) | 변수간 공분산 |
상관계수 | cor(변수1, 변수2) | 변수간 상관계수 |
변수의 길이 값 | length(변수) | 변수간 길이 |
*공분산
: 두개의 확률변수의 선형관계
*상관계수
: 두 변수간 선형관계
의 정도를 수량화
하는 측도
a<-c(1,2,3)
length(a)
3
기능 | R코드 | 비고 |
---|---|---|
함수를 불러오고 괄호 닫기 | function 함수의 {}, 함수의 () | ex) 선언시 {}, 호출시 () |
윈도우 파일 경로에서 역슬래시 두 번씩 쓰기 | D:\study\r\test.csv (D:studyrtest.csv로 인식) | \ 를 2번 쓰거나 /를 1번 |
<-사이를 붙여쓰기 | x< -pi | 에러: 객체 'x'를 찾을 수 없습니다. |
여러줄을 넘어서 식을 계속 이어갈 때 | > sum<-1+2+3 > +4+5 [1] 9 >sum [1] 6 | |
==대신 =를 사용하지 말 것 | == : 비교 연산자 = : 대입 연산자 | |
1:(n+1) 대신 1:n+1로 쓰지 말 것 | >n<-5; >1:n+1; [1] 2 3 4 5 6 >1:(n+1); [1] 1 2 3 4 5 6 | 1. 1:n 한 값에 1을 더한 것이 출력 2. 1부터 n+1까지 출력 |
패키지를 불러오고 library()나 require()를 수행할 것 | ||
2번 써야할 것과 1번 써야할 것을 혼돈하지 말 것 | aList[[a]] vs aList[a], && vs &, || vs | 등 | |
인자의 개수를 정확히 사용할 것 | mean(9,10,11) | 원래는 10인데, 이렇게 하면 9만 나옴 |
분석자
가 분석목적
에 맞는 적절한 분석방법론
을 선택해서 정확한 분석을 통해 얻은 결과를 통찰력
을 가지고 해석
함으로써 분석 과정 마침데이터 분석
을 위해서는 분석자
가 분석을 위해 설계된 방향
으로 데이터를 정확하게 입력받는 것
에서부터 시작데이터 핸들링
: 입력된 데이터
를 다양한 전처리 작업
을 거쳐 분석이 가능한 형태
로 재정리데이터 출력
: 분석된 결과
를 이해하기 쉽고 잘 해석될 수 있도록 생산출력된 결과
는 보고서
의 형태로 정리되어 최종 의사결정자
와 고객
에게 전달됨으로써 통계분석 과정 종료*R에서 다룰 수 있는 파일 타입
키보드로 데이터를 입력
직접 입력
c() : combine 함수
빈 데이터 프레임 생성
-> 편집기를 불러와 편집
하고 데이터 프레임
에 덮어 씌우기
출력할 내용의 자리수 정의
R의 부동소수점
표현 : 7자리
*digits
: 전체 숫자 자리수
파일에 출력하기
cat("출력할 내용", 변수,"\n",file="파일이름",append=T)
sink("파일이름")
...출력할 내용
sink()
파일 목록 보기
고정자리수 데이터 파일(fixed-width file) 읽기
read.fwf("파일이름", widths=c(w1,w2,...,wn))
테이블로 된 데이터 파일 읽기(변수 구분자 포함)
read.table("파일이름",sep="구분자")
#주소, 이름, 성, 등의 텍스트를 요인으로 인식시
read.table("파일이름",sep="구분자",stringsASFactor=F)
#결측치를 NA가 아닌 다른 문자열로 표현시
read.table("파일이름",sep="구분자",na.strings=".")
#파일의 첫행을 변수명으로 인식하고자 할 때
read.table("파일이름",sep="구분자",header=T)
CSV 데이터 파일 읽기(변수 구분자는 쉼표)
read.csv("파일이름",header=T)
#주소, 이름, 성 등의 텍스트를 요인으로 인식시
read.csv"파일이름",header=T,as.is=T)
csv 데이터 파일로 출력(변수 구분자는 쉼표)
write.csv(행렬/데이터프레임,"파일이름",row.names=F)
#1행을 변수명으로 자동 인식하지만 변수명이 아닐 경우
write.csv(dfm,"파일이름",col.names=F)
#1열에 레코드 번호를 자동 생성하지만 레코드 번호를 생성하지 않을 경우
write.csv(dfm,"파일이름",row.names=F)
웹에서 데이터 파일을 읽어 올 때(변수 구분자는 쉼표)
read.csv("http://www.example.com/download/data.csv")
read.table("http://www.example.com/download/data.txt")
HTML에서 테이블 읽어 올 때
library(XML)
url<-'http://www.example.com/data/table.html'
t<-readHTMLTable(url)
복잡한 구조의 파일(웹 테이블) 읽기
lines<-readLines("a.txt",n=num)
token<-scan("a.txt",what=numeric(0))
token<-scan("a.txt",what=list(v1=character(0),v2=numeric(0))
token<-scan("a.txt",what=list(v1=character(0),v2=numeric(0),n=num,nlines=num,skip=num,na.strings=list)
여러 개의 원소
를 가지는 하나의 변수동질적
: 한 벡터의 모든 원소는 같은 자료형
또는 같은 모드(mode)
위치로 인덱스
: V[2]
는 v벡터
의 2번째
원소
인덱스
를 통해 여러 개의 원소
로 구성된 하위 벡터 반환
: V[c(2,3)]
은 V벡터의 2번째, 3번째
원소로 구성된 하위 벡터
원소들은 이름을 가질 수 있음
V<-c(10,20,30);
names(V)<-c("dang","bam","cucu")
사전(Dictonary)
, 해시(Hash)
, 탐색표(Lookup Table)
과 유사이질적
: 여러 자료형
의 원소들 포함
위치로 인덱스
: L[[2]]
는 L리스트
의 2번째
원소
하위 리스트
를 추출
: L[c(2,3)]
는 L리스트의 2번째, 3번째
원소로 이루어진 하위 리스트
원소들은 이름을 가질 수 있음
: L[["Dang"]]
와 L$Dang
는 둘다 Moe
라는 이름의 원소 지칭
객체 | 예시 | 모드(Mode) |
---|---|---|
숫자 | 3.1415 | 수치형(Numeric) |
숫자 벡터 | c(2,3,4,5.5) | 수치형(Numeric) |
문자열 | "dang" | 문자형(Character) |
문자열 벡터 | c("Tom","dang","good") | 문자형(Character) |
요인 | factor(c("A","B","C")) | 수치형(Numeric) |
리스트 | list("Tom","dang","good") | 리스트(List) |
데이터 프레임 | data.frame(x=1:3,y=c("Tom","Dang","Good")) | 리스트(List) |
함수 | 함수(Function) |
특징
강력
하고 유연
한 구조. SAS
의 데이터셋
을 모방해서 만들어짐리스트의 원소
는 벡터
또는 요인
벡터
와 요인
은 데이터 프레임
의 열
벡터
와 요인
들은 동일한 길이
표 형태
의 데이터 구조열
은 서로 다른 데이터 형식
을 가질 수 있음열
에는 이름
이 있어야 함데이터 프레임 원소 접근방법
단일값(Scalar)
R
에서는 원소
가 하나
인 벡터로 인식/처리행렬(Matrix)
차원
을 가진 벡터
로 인식배열(Array)
행렬
에 3차원
또는 n차원
까지 확장된 형태벡터
에 더 많은 차원
을 부여하여 배열 생성2행 3열
, 2개
의 배열로 나뉨요인(Factor)
벡터
처럼 생겼으나, R에서는 벡터
에 있는 유일값
의 정보를 얻어내는데, 이 유일값
들을 요인의 수준(Level)
이라고 함범주형 변수
, 집단분류
행렬
은 R에서 차원
을 가진 벡터
, 텍스트마이닝
, 소셜네트워크분석
에 활용재활용 규칙(Recycling Rule)
: 길이
가 서로 다른
두 벡터
에 대해 연산
을 할 때, R은 짧은 벡터
의 처음
으로 돌아가 연산이 끝날 때까지
원소들을 재활용
벡터에 데이터 추가
v<-c(v,newItems)
v[length(v)+1<-newItem
벡터에 데이터 삽입
append(vec,newvalues,after=n)
요인 생성
f<-factor(v)
# v: 문자열 또는 정수 벡터
f<-factor(v,levels)
여러 벡터
를 합쳐 하나의 벡터
와 요인으로 만들기
comb<-stack(list(v1=v1,v2=,v2,v3=v3))
벡터 내 값 조회
# 벡터 내 1,3,5,7번째 값 조회
벡터[c(1,3,5,7)]
#벡터 내 2,4번째 값 제외 조회
벡터[-c(2,4)]
리스트
list(숫자, 문자, 함수)
리스트 생성하기
L<-list(x,y,z)
L<-list(valuename1=data, valuename2=data,valuename3=data)
L<-list(valuename1=vec,valuename2=vec,valuename3=vec)
리스트 원소 선택
#n번째 원소
L[[n]]
#목록
L[c(n1,n2,...,nk)]
이름으로 리스트 원소 선택
L[["name"]], L$name
리스트에서 원소 제거
L[["name"]]<-NULL
NULL원소
를 리스트에서 제거
L[sapply(L,is.null)]<-NULL
L[is.na(L)]<-NULL
행렬
data
대신 숫자
를 입력시 행렬의 값
이 동일한 수치값
부여matrix(data,행 수, 열 수)
a<-matrix(data,2,3)
d<-maxtirx(0,4,5)
e<-matrix(1:20,4,5)
차원
e
행렬의 차원은 4행 5열
dim(행렬)
dim(e)
대각(Diagonal)
e
행렬의 대각선
의 값
반환diag(행렬)
diag(e)
전치(Transpose)
e
행렬의 전치행렬(행,열 바꿈)
을 반환t(행렬)
t(e)
역
solve(matrix)
행렬의 곱
행렬%*% t(행렬)
a%*%t(a)
행 이름 부여
rownames(a)<-c("행이름1",..."행이름n")
열 이름 부여
colnames(a)<-c("열이름1",..."열이름n")
행렬의 연산 +, -
f+f
f-f
f+1
f-1
행렬의 연산 *
f%*%f
f*3
행렬에서 행, 열 선택하기
vec<-matrix[1,] #1행 전체가 vec
vec<-matrix[,3] #3열 전체가 vec
다변량 데이터 분석
을 위해 가장 많이 활용되는 데이터 구조행
과 열
을 추출/제거/수정
함으로써 데이터를 분석
할 수 있는 최적의 상태로 자료를 유지
해야 하며 이러한 과정은 데이터 전처리
와 데이터 클렌징
에서 가장 많이 활용데이터
에서 각각의 변수
에 해당하는 열들의 모임
데이터 프레임
벡터
들로 데이터셋 생성#각자 벡터명이 열 이름
data.frame(벡터, 벡터, 벡터)
레코드 생성
new<-data.frame(a=1,b=2,c=3,d="a")
열 데이터(변수)로 데이터 프레임 만들기
dfm<-data.frame(v1,v2,v3,f1,f2)
dfm<-as.data.frame(list.of.vectors)
데이터셋 행결합
행
으로 결합rbind(dfrm1, dfrm2)
newdata<-rbind(newdata,new)
데이터셋 열결합
cbind(dfrm1, dfrm2)
cbind(newdata,newcol)
#newcol=1:150
데이터 프레임 할당
n=1000000
dtfm<-data.frame(dosage=numeric(n),lab=character(n),respones=numeric(n))
데이터 프레임 조회1
#데이터셋 내 성별이 남성만 조회
dfrm[dfrm$gender="m"]
데이터 프레임 조회2
#데이터셋의 변수1과 변수2의 조건에 만족하는 레코드의 변수3과 변수4만을 조회
dfrm[dfrm$변수1>4 & dfrm$변수2>5, c(변수3,변수4)]
데이터 프레임 조회3
#데이터셋의 변수1 내 "문자"가 들어있는 케이스들의 변수2, 변수3 값 조회
dfrm[grep("문자",dfrm$변수1, ignore.case=T),c("변수2,변수3")]
데이터셋 조회
#데이터셋의 특정변수 값이 조건에 맞는 변수셋 조회.
#subset은 벡터와 리스트에서도 선택 가능
subset(dfrm,select=변수,subset=변수>조건)
데이터 선택
데이터 병합
#공통변수로 데이터셋 병합
merge(df1, df2, by="df1과 df2의 공통 열 이름")
열 네임 조회
# 변수들의 속성 조회
colnames(변수)
행/열 선택
subset(dfrm, select=열이름)
subset(dfrm,select=c(열이름1,...,열이름n))
subset(dfrm, select=열이름, subset=(조건))
이름으로 열 제거
subset(dfrm, select=-열이름)
열 이름 바꾸기
colnames(dfrm)<-newnames
NA 있는 행 삭제
NA_cleaning<-na.omit(dfm)
데이터 프레임 두 개 합치기
#열-열로 붙음
cbind_dfm<-cbind(dfm,dmf2)
#행-행으로 붙음
rbind_dfm<-rbind(dfm,dmf2)
# cbind는 행의 개수가 동일해야함 (recycling rule)
# rbind는 열의 개수와 열의 이름이 동일해야 함
두 개의 데이터 프레임을 동일한 변수 기준으로 합치기
merge(dfm1, dfm2, by="T_name")
merge(dfm1, dfm2, by="T_name",all=T)
데이터 프레임
의 내용에 쉽게 접근하기
#expr:열 이름
with(dfm,expr)
자료형 변환하기
데이터 구조 변환하기
as.data.frame()
as.list()
as.matrix()
as.vector()
변환 | R 코드 |
---|---|
벡터->리스트 | as.list(vec) |
벡터->행렬 | 1열짜리 행렬 : cbind(vec) 또는 as.matrix(vec) 1행짜리 행렬 : rbind(vec) n x m 행렬 : maxtrix(vec,n,m) |
벡터->데이터 프레임 | 1열짜리 데이터프레임 : as.data.frame(vec) 1행짜리 데이터프레임:as.data.frame(rbind(vec)) |
리스트->벡터 | unlist(lst) |
리스트->행렬 | 1열짜리 행렬 : as.matrix(lst) 1행짜리 행렬 : as.maxtrix(rbind(lst)) n x m 행렬 : maxtrix(lst,n,m) |
리스트->데이터 프레임 | 리스트 원소들이 데이터의 열이면 : as.data.frame(lst) 리스트 원소들이 데이터의 행이면 : rbind(obs[[1]],obs[[2]]) |
행렬->벡터 | as.vector(mat) |
행렬->리스트 | as.list(mat) |
행렬->데이터 프레임 | as.data.frame(mat) |
데이터 프레임->벡터 | 1열짜리 데이터 프레임 : dfm[[1]] or dfm[,1] 1행짜리 데이터 프레임 : dfm[1,] |
데이터 프레임->리스트 | as.list(dfm) |
데이터 프레임->행렬 | as.matrix(dfm) |
벡터 연산
함수 적용
sapply(변수, 연산함수)
파일 저장
write.csv(변수이름, "파일이름.csv")
write.csv(a,"test.csv")
파일 저장2
save(변수이름, file="파일이름.Rdata")
svae(a,file="a.Rdata")
파일 읽기
read.csv("파일이름.csv")
read.csv("a.csv")
파일 불러오기
load("파일.R")
load("a.R")
source("a.R")
데이터 삭제
rm(변수)
rm(list=ls(all=TRUE))
데이터 불러오기
data()
data(데이터셋)
데이터셋 요약
summary(데이터셋)
데이터셋 조회
#상위 6개 레코드까지 조회
head(데이터셋)
패키지 설치
install.packages("패키지 명")
패키지 불러오기
library(패키지명)
작업 종료
q()
워킹 디렉토리 지정
#R데이터와 파일 등을 로드하거나 저장 시 지정
setwd("~/")
요인
으로 집단 정의
벡터
를 여러 집단
으로 분할
(길이만 같으면 됨
)
모두 벡터
로 된 리스트
반환데이터 프레임
을 여러 집단
으로 분할
MASS
패키지, Cars98
데이터셋 활용리스트
의 각 원소
에 함수 적용
lapply(결과를 리스트 형태로 반환)
list<-lapply(l,func)
sapply(결과를 벡터/행렬로 반환)
vec<-sapply(l,func)
행렬
에 함수 적용
apply(x,margin,func,...)
m<-apply(mat,1,func)
m<-apply(mat,2,func)
데이터프레임
에 함수 적용
dfm<-lapply(dfm,func)
dfm<-sapply(dfm,func)
dfm<-apply(dfm,func)
#데이터프레임이 동질적인 경우만(모두 문자/숫자) 활용 가능
#데이터프레임을 행렬로 변환한 후 함수 적용
대용량 데이터
의 함수 적용
#sapply 이용
cors<-sapply(dfm,cor,y=targetVariable)
mask<-(rank(-abs(cors))<=10)
best.pred<-dfm[,mask]
lm(targetVariable~best.pred)
#많은 변수가 있는 데이터에서 다중회귀분석
#1. 데이터 프레임에서 타켓 변수 정함
#2. 타겟변수와 상관계수 구함
#3. 상관계수가 높은 상위 10개의 변수를 입력변수로 선정
#4. 타겟변수와 입력변수로 다중회귀분석
집단별
함수 적용
tapply(vec,factor,func)
#데이터가 집단(factors)에 속해있을 때 합계/평균 구하기
행집단 함수 적용
by(drm,factor,func)
#요인별 선형회귀선 구하기
model(dfm,factor,function(df) lm(종속변수~독립변수1+,...,data=df))
병렬 벡터, 리스트
들 함수 적용
mapply(factor, vec1, ...,vec k)
mapply(factor, list1, ..., list k)
문자열 길이
length()
는 문자열 길이
가 아닌 벡터의 길이
문자열 연결
하위문자열 추출
구분자
로 문자열 추출
하위 문자열 대체
쌍별 조합
날짜 반환1
날짜 변환2
날짜 조회
날짜 일부 추출
yday
: day of the year. (한달(30일)+16일=46)