[R 기초] 데이터 다루기
2020. 10. 18. 15:33ㆍ노트/R : 통계
데이터
연습데이터 불러오기
exam <-read.csv("Data/csv_exam.csv")
exam
라이브러리 설치
install.packages("dplyr")
install.packages("ggplot2")
library(dplyr) # 데이터정제를 위한 라이브러리
library(ggplot2) # 데이터 시각화를 위한 라이브러리
exam %>%
summarise(mean_math=sum(math))
%>% : ctrl+ shift + M 단축키
데이터 요약하기
exam %>%
group_by(class) %>%
summarise(mm=mean(math),
sm=sum(math),
md=median(math),
cnt=n())
ggplot2 라이브러리에 내장된 mpg 데이터로 연습해보기
mpg %>%
group_by(manufacturer, drv) %>%
summarise(mc = mean(cty))
#mpg데이터를 회사별로 그룹화, class를 suv 추출 , tot=cty와 hwy의 평균 값
mpg %>%
group_by(manufacturer) %>%
filter(class=="suv") %>%
mutate(tot=(cty+hwy)/2) %>%
summarise(mt=mean(tot)) %>%
arrange(desc(mt))
# 데이터프레임 생성
test1 <-data.frame(id=c(1,2,3,4,5),
midterm=c(60,80,70,90,55))
test2 <-data.frame(id=c(1,2,3,4,5),
final =c(70,80,40,80,75))
total<-left_join(test1,test2,by="id")
total
데이터 열 추가하기 left_join()
name<-data.frame(class=c(1,2,3,4,5),
teacher=c("kim","lee","park","choi","cho"))
exam_new <-left_join(exam,name,by="class")
exam_new
열 병합하기 bind_rows()
test1
test2
ta<-bind_rows(test1,test2)
ta
필터링 filter()
exam %>% filter(english>=80)
exam %>% filter(class==1 & math >=50)
exam %>% filter(class %in% c(1,3,5))
컬럼 선택하기 select()
exam %>% select(id,math)
컬럼 추가 mutate()
# test 컬럼 추가(mutate) , english >=60 => pass, fail
exam %>%
mutate(test=ifelse(english >=60, "pass","fail")) %>%
arrange(test)
결측치 다루기
데이터 생성
df <- data.frame(sex=c("M","F",NA,"M","F"),score=c(5,4,3,5,NA))
df
# 결측치 확인
is.na(df)
# 결측치 확인
table(is.na(df))
table(is.na(df$sex))
# 결측치 때문에 데이터 연산이 안될 경우
mean(df$score) #NAN (결측값 때문)
sum(df$score) #NAN (결측값 때문)
#score가 NA인 데이터만 출력
df %>% filter(is.na(score))
#score 결측치 제거
df_nomiss <-df %>% filter(!is.na(score))
mean(df_nomiss$score)
sum(df_nomiss$score)
#score, sex 컬럼에서 na가 아닌 데이터만 추출
df_nomiss <-df %>% filter(!is.na(score) & !is.na(sex))
df_nomiss
#결측치 없는 데이터만 추출
df_nomiss2<-na.omit(df)
df_nomiss2
mean(df$score, na.rm=T) # 결측치 제외하고 평균
sum(df$score, na.rm=T) # 결측치 제외하고 합계
# 결측치 대체하기
exam[c(3,8,15),"math"]<-NA
exam
# 결측치 대체하기
# math 열 이 na 이면 55를 대입
exam$math <- ifelse(is.na(exam$math), 55 , exam$math)
table(is.na(exam$math))
mean(exam$math)
# 연습하기
df <-data.frame(sex=c(1,2,1,3,2,1),
score=c(5,4,3,4,2,6))
df$sex <-ifelse(df$sex==3,NA,df$sex)
df$score<-ifelse(df$score>5,NA,df$score)
df %>% filter(!is.na(sex) & !is.na(score)) %>%
group_by(sex) %>%
summarise(ms=mean(score))
'노트 > R : 통계' 카테고리의 다른 글
[R 기초] ggiraphExtra 패키지를 이용한 인터렉티브 시각화 (0) | 2020.10.24 |
---|---|
[시계열] R에서 ARIMA 모델을 이용한 시계열 분석 (0) | 2020.10.23 |
[R 기초] ggplot2 라이브러리를 이용한 데이터 시각화 (0) | 2020.10.18 |
[팁] 구글 colab 에서 R 사용하기 (0) | 2020.10.18 |
[설치 및 환경설정] R 및 R studio 설치 및 환경설정 (0) | 2020.10.18 |