728x90
#벡터의 결측값
#######################################################################
#1-1.결측값
z<-c(1,2,3,NA,5,NA,8) #결측값이 포함된 벡터 z
sum(z) #정상 계산이 되지 않음
is.na(z) #NA 여부 확인
sum(is.na(z)) #NA의 개수 확인
sum(z,na.rm=TRUE) #NA를 제외하고 합계를 계산
#1-2.
z1<-c(1,2,3,NA,5,NA,8) #결측값이 포함된 벡터 z1
z2<-c(5,8,1,NA,3,NA,7) #결측값이 포함된 벡터 z2
z1[is.na(z1)]<-0
z1
z3<-as.vector(na.omit(z2)) #NA를 제거하고 새로운 벡터 생성
z3
##확인문제################################################################
##다음 명령문을 실행하여 ozone 벡터를 생성하고, 다음 물음에 답하시오.
ozone<-airquality$Ozone
#(1)결측값의 개수?
sum(is.na(ozone))
#(2)ozone벡터에서 결측값을 제거하고 ozone.pure 벡터에 저장하시오.
ozone.pure<-as.vector(na.omit(ozone))
##########################################################################
#매트릭스와 데이터프레임의 결측값
#NA를 포함하는 test데이터 생성
x<-iris
x[1,2]<-NA;
x[1,3]<-NA;
x[2,3]<-NA;
x[3,4]<-NA;
head(x)
##for을 이용한 방법
for(i in 1:ncol(x)){
this.na<-is.na(x[,i])
cat(colnames(x)[i],'\t',sum(this.na),'\n')
}
##apply를 이용한 방법
col_na<-function(y){
return(sum(is.na(y)))
}
na_count<-apply(x,2,FUN=col_na)
na_count
##행별로 NA의 개수를 파악하는 방법
rowSums(is.na(x)) #행별 NA 개수
sum(rowSums(is.na(x))>0) #NA가 포함된 행의 개수
sum(is.na(x)) #데이터셋 전체에서 NA개수
head(x)
x[!complete.cases(x),] #NA가 포함된 행들을 나타냄
y<-x[complete.cases(x),] #NA가 포함된 행들을 제거
head(y)
##확인문제################################################################
##R에서 제공하는 airquality 데이터셋에 대해 열별로 몇 개의 NA값이 존재하는지
##apply()함수를 이용해 나타내시오.
col_na<-function(y){
return(sum(is.na(y)))
}
apply(airquality,2,FUN=col_na)
##########################################################################
###LAB1
#1.데이터셋을 불러와서 요약정보를 확인한다.
library(carData)
str(UN) #요약정보 확인
#2.각 열별로 NA를 몇개 포함하고 있는지 확인한다.
col_na<-function(y){
return(sum(is.na(y)))
}
apply(UN,2,FUN=col_na)
#3.여성의 평균수명(lifeExpF)은 몇 살인지 확인합니다.
mean(UN$lifeExpF,na.rm=T) #NA를 제외하고 계산
#4.도시지역 평균비율(pctUrban)과 영아사망률 평균비율(infantMortality)을 확인합니다.
tmp<-UN[,c('pctUrban','infantMortality')]
tmp<-tmp[complete.cases(tmp),] #NA제거
colMeans(tmp)
colMeans(UN[c('pctUrban','infantMortality')],na.rm=TRUE)
#5.아시아 국가들의 여성 1인당 평균출산율(fertility)을 알아봅시다.
tmp<-subset(UN,region=='Asia')
mean(tmp$fertility,na.rm=T)
#######################################################################
#정렬
#######################################################################
#2-1.벡터의 정렬
v1<-c(1,7,6,8,4,2,3)
v1<-sort(v1) #오름차순
v1
v2<-sort(v1,decreasing=T) #내림차순
v2
name<-c('정대일','강재구','신현석','홍길동')
sort(name)
sort(name,decreasing = T)
order(name) #인덱스를 정렬
order(name,decreasing = T)
idx<-order(name)
name[idx]
##확인문제################################################################
##iris 데이터셋의 Petal.Length 열의 값들을 내림차순으로 정렬하시오.
##sort
sort(iris$Petal.Length,decreasing=T)
##order
idx<-order(iris$Petal.Length,decreasing=T)
iris$Petal.Length[idx]
##########################################################################
#2-2.매트릭스와 데이터프레임의 정렬
head(iris)
order(iris$Sepal.Length)
iris[order(iris$Sepal.Length),] #오름차순으로 정렬
iris[order(iris$Sepal.Length,decreasing=TRUE),] #내림차순으로 정렬
iris.new<-iris[order(iris$Sepal.Length),]
head(iris.new)
iris[order(iris$Species,decreasing=T,iris$Petal.Length),] #정렬 기준이 2개
##확인문제################################################################
##R에서 제공하는 state.x77 데이터셋을 인구수(Population)를
##기준으로 내림차순으로 정렬하시오. state.x77의 자료구조는 매트릭스이다.
state.x77[order(state.x77[,'Population'],decreasing=T)]
state.x77.new<-data.frame(state.x77)
state.x77.new[order(state.x77.new[,'Population'],decreasing=T)]
state.x77.new[order(state.x77.new[,'Population'],decreasing=T),]
##########################################################################
###LAB2
#(1)데이터셋의 내용을 확인합니다.
library(carData)
str(Highway1)
#(2)사고율(rate)을 기준으로 데이터셋을 내림차순으로 정렬합니다.
Highway1[order(Highway1$rate,decreasing=T),]
#가장 사고율이 높은 구간은 25번 구간이다.
#(3)구간의 길이(len)가 가장 긴 상위 10개 구간의 총 길이를 구합니다.
tmp<-Highway1[order(Highway1$len,decreasing = T),'len']
tmp #길이를 내림차순으로 정렬한 결과
sum(tmp[1:10])
#(4)일일 교통량(adt)이 적은 하위 10개 구간의 일일 교통량(adt). 사고율(rate)을 알아봅시다.
tmp<-Highway1[order(Highway1$adt),c('adt','rate')]
tmp
tmp[1:10,]
#(5)제한속도(slim)가 높은 상위 5개 구간의 길이(len), 일일 교통량(adt), 사고율(rate)을 알아봅니다.
tmp<-Highway1[order(Highway1$slim,decreasing=T),c('len','adt','rate')]
tmp
tmp[1:5,]
#######################################################################
#샘플링과 조합
#3-1.샘플링
x<-1:100
y<-sample(x,size=10,replace=FALSE) #비복원추출
#iris데이터셋에서 50개 비복원추출
idx<-sample(1:nrow(iris),size=50,replace=F)
iris.50<-iris[idx,]
dim(iris.50)
head(iris.50)
sample(1:20,size=5)
sample(1:20,size=5)
sample(1:20,size=5)
set.seed(100)
sample(1:20,size=5)
set.seed(100)
sample(1:20,size=5)
sample(1:20,size=5)
##확인문제################################################################
##state.x77 데이터셋에서 10개의 행을 비복원 추출로 샘플링하여 나타내시오
idx<-sample(1:nrow(state.x77),size=10,repalce=F)
state.10<-state.x77[idx]
state.10
##########################################################################
#3-2.조합
combn(1:5,3) #1~5에서 3개를 뽑는 조합
x<-c("red","green","blue","black","white")
com<-combn(x,2)
com
for(i in 1:ncol(com)){
cat(com[,i],"\n")
}
##확인문제################################################################
##iris 데이터셋의 품종(Species)을 2개씩 짝지어서 나타내시오.
sp<-levels(iris$Species)
combn(sp,2)
##########################################################################
###LAB3
#(1)KosteckiDillon데이터셋을 불러와서 내용을 확인합니다.
library(carData)
str(KosteckiDillon)
#(2)전체 데이터에 대한 평균 치료일수(dos)를 구합니다.
tot.mean<-mean(KosteckiDillon$dos)
tot.mean
#(3)샘플링 비율을 달리하면서 평균 치료일수(dos)를 구하여 tot.mean과의 차이를 확인합니다.
for(rate in (1:5)*0.1){
set.seed(100)
idx<-sample(nrow(KosteckiDillon),nrow(KosteckiDillon)*rate)
sam.data<-KosteckiDillon[idx,'dos'] #샘플링 데이터 추출
tmp.mean<-mean(sam.data)
cat('Diff:',rate,tot.mean-tmp.mean,'\n')
}
#(4)5개의 열로 구성된 데이터셋에서 열을 3개씩 짝지어서 새로운 데이터셋을
#생성한다고 했을 때 몇 개의 데이터셋이 만들어질 수 있는지 알아봅니다.
cbn<-combn(1:5,3)
cbn
ncol(cbn)
#######################################################################
#데이터 집계
#######################################################################
#4-1.품종별 꽃잎 꽃받침의 폭과 길이의 평균
agg<-aggregate(iris[,-5],by=list(iris$Species),FUN=mean)
#iris[,-5]의 의미는 5열을 제외하고 출력
agg
#4-2.품종별 꽃잎 꽃받침의 폭과 길이의 표준편차
agg<-aggregate(iris[,-5],by=list(품종=iris$Species),FUN=sd)
agg
#4-2.2개의 기준에 대해 다른 열들의 최댓값 구하기
head(mtcars)
agg<-aggregate(mtcars,by=list(cyl=mtcars$cyl,vs=mtcars$vs),FUN=max)
agg
##확인문제################################################################
##iris 데이터셋의 품종별 Sepal.Length의 최댓값을 나타내시오.
agg<-aggregate(iris$Sepal.Length,by=list(Species=iris$Species),FUN=max)
agg
##########################################################################
###LAB3
#(1)먼저 데이터셋을 불러와서 내용을 확인합니다.
library(carData)
data('CES11')
str(CES11)
#(2)낙태 금지(abortion)에 대한 전체적인 찬성(Yes),반대(No) 비율을 알아봅니다.
table(CES11$abortion)
table(CES11$abortion)/nrow(CES11)
#(3)낙태 금지(abortion)에 대해 성별(gender)에 따른 찬성(Yex),반대(No) 비율을 알아봅니다.
agg<-aggregate(CES11$abortion,by=list(성별=CES11$gender),FUN=table)
agg.2<-agg[,2]
agg.2[1,]<-agg.2[1,]/sum(agg.2[1,]) #female Yes/No 비율 계산
agg.2[2,]<-agg.2[2,]/sum(agg.2[2,]) #male Yes/No 비율 계산
rownames(agg.2)<-agg[,1]
agg.2
#(4)낙태 금지(abortion)에 대해 도시지역(urban)과 비도시지역(rural)의
#찬성(Yes)/반대(No) 비율을 알아봅니다.
agg<-aggregate(CES11$abortion,by=list(지역=CES11$urban),FUN=table)
agg.2<-agg[,2]
agg.2[1,]<-agg.2[1,]/sum(agg.2[1,])
agg.2[2,]<-agg.2[2,]/sum(agg.2[2,])
rownames(agg.2)<-agg[,1]
agg.2
#######################################################################
728x90
'기타 > R' 카테고리의 다른 글
[R]KNN-Titanic (0) | 2021.11.26 |
---|---|
[R]난생처음 R코딩&데이터 분석-11장 연습문제 (0) | 2021.11.22 |
[R]난생처음 R코딩&데이터 분석-10장 연습문제 (0) | 2021.11.22 |
[R]난생처음 R코딩&데이터 분석-9장 연습문제 (0) | 2021.11.21 |
[R]난생처음 R코딩&데이터 분석-8장 연습문제 (0) | 2021.11.21 |