영원히 고통 받는 INFP의 메모장입니다
> feat. 국비교육
백신 맞고 잠시 지쳤던 이번주,,⭐️ 오늘 하루 달려본다 R ~ !!!
쉽게 배우는 R 데이터 분석 교재로 복습합니다
which(조건)
x <- c(1,2,3,4,5)
which(x %% 2 == 0) # 짝수의 '위치값 출력'
x[which(x %% 2 == 0)] # 짝수의 '값 자체 출력'
# x[which가 반환한 위치 값이 들어가게 됨] -> 값을 출력!
---
a <- array(11:20, dim=c(3,4))
which(a %% 2 == 0, arr.ind = TRUE)
# 위치 값을 인덱스 번호 형태가 아닌 행 • 열 형태로 반환
# 행렬과 배열에서만 적용할 수 있다
---
which.max() / which.min()
최댓값의 인덱스 / 최솟값의 인덱스
nrow() 함수 -> 행의 개수를 확인하는 함수
ncol() 함수 -> 열의 개수를 확인하는 함수
---
# 데이터 변환하는 함수
as.vector() / as.matrix() / as.list() / as.data.frame()
## 리스트를 벡터로 변환할 때는 unlist() 를 사용한다
---
# 열 이름 변경
names(데이터셋) <- c(이름s)
colnames(데이터셋) <- c(이름s)
dplyr 패키지에는 전처리 작업에 유용한 함수가 많이 제공된다
filter() : 행 추출
select() : 열 추출
arrange() : 정렬
mutate() : 변수 추가
summarise() : 통계치 산출
group_by() : 집단별로 나누기
left_join() : 데이터 열 합치기
bind_rows() : 데이터 행 합치기
쉽게 배우는 R 데이터 분석 교재로 복습합니다
# 교재에서 제공하는 데이터셋을 활용했습니다
exam <- read.csv("csv_exam.csv")
exam %>% filter(class==1)
exam %>% filter(class !=3)
# ctrl + shift + M 로 파이프 연산자를 쉽게 입력할 수 있다
exam %>% filter(math > 50)
# 수학 점수가 50점 이상인 행만 추출
# %>% 연산자로 연결되기 때문에 exam$math 와 같이 쓰지 않아도 된다
exam %>% filter(class == 1 & math >= 50)
exam %>% filter(math >= 90 | english >= 90)
# 조건이 여러 개인 경우 & 이나 | 사용한다
exam %>% filter(class %in% c(1,3,5))
# %in% 과 c() 함수를 사용하는 방법도 있다
class1 <- exam %>% filter(class == 1)
mean(class1$math)
class2 <- exam %>% filter(class == 2)
mean(class2$math)
# filter 함수를 통해 추출한 값을 변수에 넣으면
# 조건에 맞는 값만 담고 있는 변수를 만들 수 있다
# select() 함수
exam %>% select(math)
exam %>% select(class,math,english)
# 변수 제외하기
exam %>% select(-math)
# math를 제외한 데이터를 추출
exam %>% filter(class == 1) %>% select(english)
# class 가 1인 학생들의 영어 성적만을 추출한다
exam %>%
select(id,math) %>%
head
# id, math 열 데이터의 앞 6개만 추출한다
exam %>% arrange(math)
exam %>% arrange(desc(math))
# 정렬하기
# desc 는 내림차순
exam %>% mutate(total = math + english + science) %>%
arrange(total) %>% head
# mutate 함수 통해 파생변수 추출
# 기존 데이터셋에는 영향X
# 변수에 값을 넣어야한다
exam %>%
group_by(class) %>%
summarise(mean_math = mean(math))
# 반별 수학과목의 평균
exam %>%
group_by(class) %>%
summarise(mean_math = mean(math),
sum_math = sum(math),
median_math = median(math),
n = n())
# 그룹별 요약 통계량을 한 번에 볼 수 있다
# n() 은 빈도를 나타내는 함수 -> 각 그룹 내 데이터 수를 알 수 있다
mpg %>%
group_by(manufacturer,drv) %>%
summarise(mean_cty = mean(cty)) %>%
head(10)
# 제조사 & 구동 방식별 cty 평균 10개 출력
test1 <- data.frame(id = c(1,2,3,4,5),
midterm = c(60,80,70,90,85))
test2 <- data.frame(id = c(1,2,3,4,5),
final = c(70,83,65,95,80))
total <- left_join(test1,test2,by='id')
# test1 과 test2가 공통으로 갖고 있는 id 를 기준으로 열 합치기
group_a <- data.frame(id = c(1,2,3,4,5),
test = c(60,80,70,90,85))
group_b <- data.frame(id = c(6,7,8,9,10),
test = c(70,83,65,95,80))
group_all <- bind_rows(group_a,group_b)
# 같은 데이터 구조를 갖고 있는 group_a 와 group_b 행 합치기
# 만약 group_b 의 열 이름이 group_a와 다르다면 rename 후 합친다