Notes on Basic R Programming
Introduction
This note is based on some of the most basic R programming language. The notes were taken sometime in Fall 2020.
작업공간 설정
getwd(): get working directory setwd(): set working directory read.table(‘xxx.txt’)
자료형
- [✔️]Scalar(스칼라): 한개 값만 갖는 변수
- [✔️]Vector(벡터): 여러개의 자료 저장 1차원 선형 자료 구조 (index 가 1부터 시작)
- [✔️]Matrix(행렬): 2차원 구조 (열부터 채워짐)
- [✔️]Array(배열): 다차원 구조 (상대적으로 이용 낮음)
- [✔️]List(리스트): 성격이 다른 구조(스칼라, 벡터, 행렬 등)을 묶는 구조
- [✔️]Data Frame(데이터 프레임): 리스트+벡터 혼합. column=리스트
- matrix 와 다른 점: 각각의 열(컬럼)마다 다른 자료구조가 들어갈 수 있다.
자료형 확인/변환
- 확인
- is.~ 함수
- 변환
- as.~ 함수
Vector 함수
- 자료구조
- c()
- seq(from, to, by) : 등차수열
- rep(x, times, each) : 반복
- 데이터 처리 함수
- union(x,y) : 합집합
- setdiff(x,y) : 차집합 X-Y
- intersect(x,y) : 교집합
- 데이터 컬럼
- names(x)
Matrix 함수
- 자료구조
- matrix(x, nrow, ncol, byrow)
- colnames(x)
- rownames(x)
- 데이터 처리
- mode / class
- dim
- length()
- ncol, nrow
- apply
apply 함수
: column 이 바뀌는 것을 유의해라! apply(x, margin, function) margin : 1 - row, 2 - column 에 function 적용
list 함수
-
자료구조 member <- list( name=c(“James”, “Jane”), ages=c(25,28), address=c(“서울”, “부산”), m=matrix(2,2,2) )
-
자료 처리 함수
- unlist
- lapply(x, function) : list 용 apply. 각 key에 function 적용
- sapply(x, function) : lapply + unlist
- do.call(function, x) : function(unlist(x))
- cbind : column bind
- paste : row w/ delimiter
Data Frame 처리 함수
- str : 구조 보기
- dim
- ncol / nrow
- names
- summary
- apply
- subset
- merge
- 문자열 추출 (정규표현식—->위키백과로 연습)
- str_extract_all
- str_replace_all # 2020-09-21 과제: 2장 연습문제 4번
문자열 함수
-
정규표현식
//stringr
- str_extract, str_extract_all
- str_length, str_locate, str_sub(=substring), str_to_upper(=toupper), str_to_lower(=tolower), str_replace, str_c, str_split
//r내장
- paste
데이터 입출력 방법
- 데이터 읽기
- 키보드 입력: scan(), editt()
- 로컬 파일 읽기: read.table(), read.csv(), fread(), read.xlsx()
- 인터넷에서 파일 가져오기: read.csv()
- 웹문서 가져오기: GET(), rawToChar(), readHTMLTable()
- 데이터 출력
- 화면 출력
- 파일 저장
조건문/반복문
- 조건문
- if/else
- ifelse
- switch
- which
- 반복문
- for
- while
함수
- R 내장 함수
- 기술통계량 관련: min(), max()
- 수학관련: abs(), sqrt(), exp()
- 집합연산 관련: union(), intersect(), setdiff()
-
사용자 정의 함수
functionName <- function(param1, param2….) { …codes… }
데이터 시각화
- 이산형(barplot, dot chart, pie chart, 3d pie chart)
- 연속형 (histogram, box plot, scatter plot)
Tidyverse package - 데이터 조작
- plyr
- dplyr : plyr 속도 향상 버젼. dataframe 집중적으로 다룸
- reshape2
Data Processing
- 파생 변수 생성 -> 합치기
table -> dcast -> join
그룹화 -> 비그룹화
- melt melt(data, id=): id 빼고 모두 variable, value 열에 들어간다
- dcast dcast(data, row~column, value.var=, function, function_param) 파생변수 합치기
- join(x, y, by)
-
결측치 제거 및 편집 dataframe 도 상관없이 na.omit 먹힘
-table( , exclude=NULL): NA 도 표시
Visualization Analysis
- ggplot2 package
- qplot(): ggplot 의 빠른 버젼 (1) one variable : barplot, barchart qplot(변수, 데이터, fill=, color=, facets= , geom=…) fill, color, facets 질적변수 들어가면 좋음. (2) two varibles : scatterplot color, facets + size + shape -> 점의 크기/모양 이것도 데이터 열 입력 가능. 근데 모양은 무조건 범주형이어야 함. fill 없는거 주의.
- 양적변수(이산형)을 범주형으로 생성 –> factor() factor(data, labels=c()) labels 로 이름 바꿔줌 예시) qplot(wt, mpg, data=mtcars, color=carb) qplot(wt, mpg, data=mtcars, color=factor(carb))
-
geom: 그래프 도형 속성 bar, point, line, smooth…
- ggplot(): qplot(twoVariable)+aes 라고 생각하면 될듯. (1) setup ggplot(데이터, aes(x=변수1, y=변수2, color=, shape=)) (2) layers: geom geom_point, geom_smooth, geom_line … parameter -> aes; color, shape 등이 들어갈 수 있음 (3) labels labs(title, x, y) (4) theme theme() ggtitle() scale_x_discrete() scale_y_discrete() scale_color_discrete()/continuous() (5) facets facet_wrap facet_grid *boxplot
- ggsave()
Data Base
- packages
- DBI
- rJava
- RJDBC
- select dbGetQuery
- insert, update, delete dbSendUpdate
- create, alter
기초통계
난수 생성 set.seed(1)
- 단일 집단 모평균 추론
- 통계량 계산: xbar, se(x), confidentialInterval, mean
- 정규성 검정
- shapiro.test: p값이 0.05 보다 크면 정규성을 만족. (귀무가설: ~가 정규분포를 따른다.)
- 히스토그램
- Frequency: 빈도수 (=FALSE일 경우: 퍼센트로 표시)
- density: data를 x, density를 y 로 설정.
- Q-Q plot
- qqnorm
- qqline
단일 집단 모평균 추론
t.test
대응비교) t.test(before, after, paired=T)
두 모집단 모평균 추론
- 등분산성 검정 var.test
- 모평균 비교 검정 t.test(a, b, alter=)
서로 독립인 세 집단 이상에 대한 추론
*특이값 제거 *tapply(table.names, value, function)
-
세 집단 동질성 검정 - 분포가 동일하냐 bartlett.test (H0: 세 집단 분포의 모양은 동일하다)
-
세 집단 모평균 차이 검정 aov (H0: 세 집단의 평균은 동일하다)
한 모집단의 모비율에 대한 추론
binom.test(성공횟수, 총횟수, p=, alternative=, conf.level)
두 모집단의 모비율 추론
prop.test(c(성공횟수1, 2), c(총횟수1, 2), alternative=) 세 모집단도 동일함.
카이제곱검정
rxc 분할표 작성: CrossTable(r, c, chisq=T)
- 적합도 검정 -> 어떻게 보면 여러 집단 모비율 추론이랑 비슷 H0: p1=p2=…= P() “기대치와 관찰치는 차이가 없다” chisq.test()
- 독립성 검정 H0: 두 변수는 독립적이다 (=관련성이 없다) CrossTable(x,y,chisq=T)
- 동질성 검정 H0: 두 집단의 분포가 동일하다 독립성 검정과 매우 비슷
객체 지향 언어
-
- S3
- 계산이 method를 통해 수행되는 동안 generic function (제너릭 함수)라고 불리는 특수한 유형의 함수가 어느 method를 호출할지 결정 ex) drawRect(canvas, “blue”) # canvas의 object type에 따라 다른 method를 실행
foo <- object; class(foo) <- “class name” f <- function f.foo <- function
-
- S4
- S3와 유사하지만 보다 좀 더 형식적이고 Class에 대한 형식적인 정의를 갖음. 필드만 입력 가능. @ 로 호출 ex) alice@name
setClass(“class.name”, slots=, contain=) new(“class.name”, slot1=, slot2=,…)
setGeneric(“function.name”) setMethod(“function.name”, parameter(), function)
-
- RC
- 다른 언어의 Class 정의와 유사. Class에 method가 따름. $로 객체와 method를 구별 ex) canvas$drawRect(“blue”)
CLASS.NAME <- setRefClass(“class.name”, fields=, methods=) “instance.name” <- CLASS.NAME$new(field1=)