< 3 > 데이터 전처리를 위한 준비
함수 작성 후 바로 결과 보는 법
1. ;(세미콜론) ex. x1 <- seq(1,10,by =2) ; x1
2. 함수 앞 뒤에 () ex. (x1 <- seq(1,10,by =2) )
3-0) 연산자
1==3 # 같다
1!=3 # 같지않다
TRUE & TRUE # and
TRUE | False # or
3-1) 다양한 기본 함수
seq(x,y,z) : x부터 y까지 공차z
x1 <- seq(1,10,by =2) ; x1
x2 <- seq(1,10,3) ; x2
sample(x , y) : 1~x 중에서 y개 랜덤으로 추출
sample(10,2)
sample(5,1)
sample(100,1)
runif(n) 0~1 사이 난수 n개 추출
(x3 <- runif(2) )
set.seed() : 난수 고정하는 함수
#(인수는 뭐가 들어가도 상관 없음)
#(runif()함수와 같이 실행해야 고정됨)
set.seed(1)
x1 <- runif(20)
round(a, b) : a를 소수b째 자리까지 반올림
round(runif(1),2)
round(131.08, -1) # 1의 자리에서 반올림
rnorm(난수 개수, 평균, 표준편차)
install.packages("ggplot2")
library(ggplot2)
x4<- rnorm(60, 50, 3) ; x4
rep(x, times=y) / rep(x, each=y) : 같은 값 반복
rep("a", 5)
rep(c("a", "b"), 5)
rep(c("a","b"), each=3)
unlist() : List 데이터 계산 방법
v <- c(1,2,3)
l <- list(1,2,3) ;l
v
l
v[1]
l[1]
l[[1]] #배열의 원소값
klist <- list(9,2,3) ;klist
klist + 100 # 오류
unlist(klist)
unlist(klist)+100 # 연산 계산 위해 unlist
klist[1]
klist[1]+10
klist[[1]]+10
names(klist)
LETTERS[1:8] # 알파벳 대문자들
names(klist) <- LETTERS[1:3]
klist
klist[[3]]
klist["3"] # 오류
klist$C
3-2) 행렬 관련 함수
rbind,cbind :데이터셋 합치기
array1 <- c(1,2,3)
array2 <- c(4,5,6)
array3 <- c(7,8,9)
mat1 <- rbind(array1, array2, array3)
mat2 <- cbind(array1, array2, array3)
apply() : 행렬에서 특정 방향으로 함수계산
apply(데이터, 적용방향, 함수)
- 적용방향 : 1.가로방향, 2. 세로방향
head(iris)
apply( iris[,1:4], 2, mean)
apply( iris[,1:4], 2, max)
apply( iris[,1:4], 2, min)
apply( iris[,1:4], 2, sum)
colnames () 열이름 변경
colnames(mat1) <- c("A", "B", "C")
mat1
3-3) 변수명 변경하는 법, 파생 변수 생성하기
install.packages("dplyr")
library(dplyr)
rename() : 변수명 변경
rename( 데이터 세트, 신 변수명 = 구 변수명)
파생변수 생성하기
1) 데이터 세트$새 파생 변수명 <- 데이터 세트$기존 변수명 ~ 연산
2) 데이터 세트$새 파생 변수명 <- ifelse(조건절, 참일때, 거짓일 때)
Q. 변수명 변경, 파생 변수 생성 연습문제
#ggplot2 패키지에는 미국 동북중부 43개 지역의 인구 통계 정보를 담은 midwest라는 데이터가 포함되어 있습니다.
#midwset 데이터를 사용해 데이터 분석 문제를 해결해보세요.
#1) ggplot2의 midwest 데이터를 데이터프레임 형태로 불러와서 데이터의 특성을 파악하세요.
#2) poptotal(전체인구)을 total로 popasian(아시아인구)을 asian으로 변수명을 수정하세요.
#3) total, asian 변수를 이용해 '전체 인구 대비 아시아 인구 백분율' 파생변수를 만들고, qplot 그래프를 완성하시오.
#4) 아시아 인구 백분율 전체의 평균을 구하고 평균을 초과하면 "large", 그외에는 "small"을 부여하는 파생변수를 만들어보세요.
#5) "large"와 "small"에 해당하는 지역이 얼마나 되는지, 빈도표와 qplot그래프를 완성하시오.
#1)
install.packages("ggplot2")
library(ggplot2)
install.packages("dplyr")
library(dplyr)
midwest_1 <- as.data.frame(midwest)
str(midwest_1)
#2)
midwest_1 <- rename(midwest_1, "total" = "poptotal", "asian" = "popasian")
#3)
midwest_1$percentage_asian <- (midwest_1$asian/midwest_1$total)*100
qplot(midwest_1$percentage_asian)
#4)
mean_percasian <- mean(midwest_1$percentage_asian)
midwest_1$meanVSpercasian <- ifelse(midwest_1$percentage_asian > mean_percasian, "large", "small")
#5)
table(midwest_1$meanVSpercasian)
qplot(midwest_1$meanVSpercasian)
3-4) 날짜, 시간 관련 함수
출력 값의 형식은 항상 "YYYY-MM-DD"
as.Date("2018-01-10")
as.Date("15.09.1994", "%d.%m.%Y")
as.Date("1994/09/15", "%Y/%m/%d")
as.Date("09-15-1994", "%m-%d-%Y")
#미국식 표기로 바꾸는 법
us_date <- format(as.Date("1994-09-15", "%Y-%m-%d"), "%d/%m/%Y") ;us_date
## 단, 이거는 date 아니고 character로 저장됨 (date로 저장하는 법은 모르겠다...)
str(us_date)
Sys.time() # 오늘의 날짜와 시간
Sys.Date() # 오늘의 날짜
today <- Sys.Date()
today
format(today, format = "%Y/%m/%d%a") # 형식 바꾸기
Sys.setlocale("LC_TIME","English") # 요일 영어로 바꾸는 법
format(today, format = "%Y/%m/%d%a")
Sys.setlocale("LC_TIME","Korean") # 요일 다시 한글로 바꾸는 법
weekdays(today + 1) # 요일 나타내는 함수
weekdays(today + 1:8)
seq(today, by = 1, length.out = 7) # 오늘부터 하루 간격으로 7개 날짜
seq(today, by = 7, length.out = 7) # 오늘부터 7일 간격으로 7개 날짜
3-5) 결과값 보는 함수
str(iris)
summary(iris) ## 결과 요약
head(iris) ## 위에서 6개 추출
tail(iris) ## 아래에서 6개 추출
3-6) 결측치(NA) 발생 했을 때 방법
x <- NA
sum(1,2,x) # 오류
방법 1 : na.rm = T (결측치 아예 제거)
sum(1,2,x, na.rm=T)
방법 2 : 결측치 발생 시 0으로 값 주기
x[is.na(x)] <- 0
sum(1,2,x)
outlier <- data.frame(sex = c(1,2,1,NA,2,1),
score = c(5,4,3,4,2,NA))
outlier_nomiss <- outlier %>% filter(!is.na(score))
방법 3 : na.omit()
na.omit(outlier)
3-7) 특정 데이터 조회
벡터에서 데이터 조회하기
var3 <- c("멸치깡", "맛깡", "양파깡", "맛짱", "빙구")
var3[2] # 특정 데이터 호출
var3[-2] # 특정 데이터만 빼고 조회
var3[2:4] # 범위(2부터4까지) 주고 조회
var3[-2:-4] # 범위(2부터4까지) 제외하고 조회
%in% : 특정 데이터 조회
var5 <- c(1,3,5,7,9)
3 %in% var5 # var5 안에 3이 있는가?
4 %in% var5 # var5 안에 4가 있는가?
Fruit <- c("사과", "단감", "귤", "파인애플", "apple")
"감" %in% Fruit
"p" %in% Fruit