티스토리 뷰

 


0. 기타 기능

 

도움말 ?함수명 또는 help(함수명)

주석 #

현재 작업 중인 경로 getwd()

작업 경로 지정 setwd("디렉토리")

파일 목록 확인 dir()  또는 list.files()

변수 목록 확인 ls()

메모리 비우기 rm(list=ls())

출력 print()

 

연산자

%/% : 나눗셈의 몫

%% : 나눗셈의 나머지

%*% : 행렬곱

~ 식 ( 예 : y ~ x + 3)

 


1. 데이터구조

R의 데이터 구조로는 Vector, Matrix, Array, Data Frame, List 등이 있다.

Vector

 

기본적으로 c 함수를 이용해서 만들 수 있다.

x = c(1, 10 ,24, 40)
y <- c("사과","포도")

대입은 = 또는 <- 기호를 사용할 수 있다. (<<- 는 전역변수에 값을 할당)

좌측의 값을 우측의 변수에 대입할 때는 -> 도 가능


Vector는 같은 데이터 유형으로만 저장할 수 있으며, 만약 아래처럼 다른 자료형을 입력할 경우 

1이 숫자 1이 아닌 문자 "1"로 변환되어 저장된다.

z <- c(1, "a")

벡터를 생성하는 다른 방법으로는 rep와 seq 등이 있다.

rep1 <- rep(1:4, each =2, times=3)

위의 rep은 지정한 인수를 반복하는 함수다. 따라서 1~4 까지 , 각 2번씩 , 3회 저장되는 Vector를 생성한다.

따라서 rep1 에는 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 가 저장된다.

 

 

seq1 <- seq(1,9, by=2)
seq2 <- seq(1,9, length=4)

 

seq는 연속된 숫자를 저장하기에 유용한 함수다.

seq1은 1~9까지의 숫자를 2 간격으로 저장하였으므로, 1 3 5 7 9 가 저장될 것이고,

seq2는 1~9까지의 숫자 중에서 등간격으로 4개만 저장한다. 따라서 1.000000 3.666667 6.333333 9.000000 의 결과를 얻는다.

 


a[-3]

위와 같이 a[-3]을 사용하면 3번째 원소를 제외한 나머지를 반환한다.

 

a[a>3]

위와 같이 조건문을 활용한 출력도 가능하다.

 

names(x) <- c("1번","2번","3번")

x의 요소에 대해 이름 지정 가능


ifelse(a1 == 100, 0 , 1)

ifelse(조건, 참일 경우, 거짓일 경우)의 형태로도 사용가능합니다. a1이 100 200 300일 경우에 0 1 1 이 반환될 것입니다.


Matrix

Matrix는 말그대로 행렬을 나타내는 자료구조다. Vector와 마찬가지로 같은 자료형으로 입력이 가능하며, 2차원 형태의 자료구조를 갖는다. 

m1 <- matrix(c(1:10),2)

matrix는 위와 같이 matrix 키워드를 이용하여 생성가능하다. 기본적으로는 열을 우선으로 채우며, 

위의 경우에는 1부터 10까지의 숫자를 2행 5열의 행렬로 만든다.

 

t(m) #전치행렬
m1 %*% m2 #행렬곱
solve(m) #역행렬

 

m2 <- matrix(c(1:15),nrow = 3, ncol=5 , byrow=FALSE, dimnames=NULL)

하지만 행렬의 형태를 명확하게 표현하기 위해 인수명 = 값 형태로 넣어주는 것이 좋다.

위의 m2는 1~15의 숫자를 3행 5열 , 열 우선 (아래 방향으로 숫자를 채움) 으로 행렬을 만든다.


dimnames(m1) <- list(c("1행","2행"),c("1열","2열","3열","4열","5열"))

위와 같이 dimnames를 이용하여 각 행과 열에 이름을 지정하는 것도 가능하다.

 

rbind, cbind 함수를 이용하여 행 또는 열을 추가할 수 있다.


Array

배열은 다차원 형태의 행렬이라고 생각하면 쉽다.

아래와 같이 array 함수를 이용하여 생성이 가능하다.

a <- array(1:12, dim=c(2,2,3))

Data frame

데이터프레임은 각 열에 다른 자료형을 저장할 수 있다.

data.frame 키워드를 이용하여 생성 가능하다.

a1 <- c(100,200,300)
b1 <- c("a","b","c")
c1 <- c(TRUE, FALSE, TRUE)

D1 <- data.frame(num=a1,alph=b1,TF=c1)

범주형 데이터

factor(data, levels, labels, ordered)

levels :  범주 목록을 지정

labels : 범주 표시 값 지정

ordered : TRUE면 순서형, FALSE면 명목형

 

> factor(c(1,1,0,0,0), levels = c(1,0), labels = c("m","w"))
[1] m m w w w
Levels: m w

 

NA : 데이터 값이 없음 (결측치), 상수

NULL : 정의되지 않음 (초기화 X), 객체

NAN : 숫자가 아님

INF : 무한대


2. 함수

함수 사용법이 궁금한 경우 help("함수명")을 콘솔창에 입력하여 도움말 문서를 읽어볼 수 있다.

 

사용자 정의 함수

> myfun <- function(a){
+ return (a+1)
+ }

 

형변환

데이터 형식은 typeof 또는 mode 를 이용할 수 있다.

typeof(iris)
mode(iris)

또한 아래와 같이 is.데이터형식 형태로 데이터형을 확인할 수 있다.

is.matrix(iris)
is.list(iris)
is.na(x)

 

as.데이터형식(x) 

ex) as.matrix  as.numeric  as.logical  as.integer  as.list  as.Date

 

시스템 시간 확인

Sys.Date()

 

 

paste

> paste(1:5, c("a","b","c"), sep=" and ")
[1] "1 and a" "2 and b" "3 and c" "4 and a" "5 and b"

두 문자를 연결하여 새로운 문자열을 만든다.

 

substr

> substr(c("korea","japan"),1,2)
[1] "ko" "ja"

1번째에서 2문자씩 자른 결과를 얻는다.

 

 

사분위수

> quantile(c(1,2,3,4,5,6,7))
  0%  25%  50%  75% 100% 
 1.0  2.5  4.0  5.5  7.0 
> quantile(c(1,2,3,4,5,6,7,8,9))
  0%  25%  50%  75% 100% 
   1    3    5    7    9 
> quantile(c(1,2,3,4,5,6,7,8,9,10))
   0%   25%   50%   75%  100% 
 1.00  3.25  5.50  7.75 10.00 

 

names

> names(airquality)
[1] "Ozone"   "Solar.R" "Wind"    "Temp"    "Month"   "Day" 
colnames(iris)

 

str

> str(iris)
'data.frame':	150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

데이터 구조 파악

 

그 외에도

mean 평균, var 분산, log 자연로그값, sum 합계, median 중앙값, cov 공분산, cor 상관계수, summary 요약


3. 그래프

 

pairs(iris[1:4], main="제목", pch=21, bg=c("red","blue","green"))

boxplot

height=c(182,160,165,170,160,190,175,173,210)
boxplot(height)

결과

ADP필기 기출

Q3-Q1 을  IQR이라고 하며

박스와 최대값, 최소값 사이의 선을 Whisker라고 한다.


4. 패키지

 

설치

install.packages("reshape")

패키지 포함

library(reshape)

패키지 포함 해제

detach("package:reshape", unload = TRUE)

패키지 업데이트

update.packages("패키지명")

로드된 패키지 목록 확인

Search()

 

reshape -> melt, cast 등의 함수

sqldf -> R에서 sql문을 사용할 수 있게 해주는 패키지

plyr -> 데이터를 split, apply, combine 하는 함수를 제공 ex) ddply

data.table -> 데이터프레임과 유사하지만, 그루핑, 정렬 등의 분석에서 더 빠르다


5. 데이터

 

data 불러오기

data(iris)

data 보기

view(iris)

head

head(iris, 5)

처음 5번째까지의 데이터만 보기

 

iris$Sepal.Length

iris 데이터의 Sepal.Length 열 정보

 

x <- rchisq(100,5)

자유도가 5인 카이제곱분포에서 난수 100개 생성

 


6. 분석

 

회귀분석

 

set.seed(2)
u<-runif(10,0,11)
v<-runif(10,11,20)
w<-runif(10,1,30)
y = 3 + 0.1*u + 2*v -3*w +rnorm(10,0,0.1)
dfrm1 <- data.frame(y,u,v,w)
m<-lm(y~u+v+w,dfrm1)
summary(m)
par(mfrow=c(2,2)) # 2x2
plot(m)

Residual vs Fitted 

오차의 평균은 0이고 분산은 일정한 정규분포를 가정하므로, 기울기가 0인 직선이어야 바람직하다.

 

Normal Q-Q

잔차들이 그래프 선상에 가까울수록, 잔차가 정규분포를 잘 따르고 있는 것이다.

 

Scale-Location

0에서 멀리 떨어진 값은 이상치일 가능성이 높다.

 

Residuals vs Leverage

cook's distance가 1이 넘어가면 관측치를 영향점으로 판별한다.


댓글
반응형
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함