이전 글에서는 filter(행 추출), select(열 추출)를 통해 데이터를 추출했었습니다
2024.07.04 - [R/기초] - dplyr 패키지 이용하기 - %>% 파이프라인 연산자
dplyr 패키지 이용하기 - %>% 파이프라인 연산자
파이프라인 연산자 %>% : 단축키는 ctrl + shitf + m R의 dplyr 패키지는 데이터 처리와 분석을 위한 강력한 도구특히 파이프라인 연산자 %>%를 사용하여 직관적이고 효율적인 코드 작성이 가능 dplyr 함
d22pinsights.tistory.com
이번에는 내장함수로 데이터를 추출해보겠습니다
데이터 추출법
- R에서는 다양한 방법으로 데이터를 추출할 수 있습니다.
- 인덱싱을 이용한 데이터 추출: 대괄호 [], 달러 기호 $, 이름 참조 등
데이터 준비하기
exam <- read.csv("csv_exam.csv")
인덱싱 사용하여 데이터 추출하기
• 인덱스(Index) : 데이터의 위치(번호, 이름)
• 인덱싱(Indexing) : 인덱스로 데이터 추출하는 것
인덱스 사용법 : 데이터[행, 열]
#행번호로 행 추출
exam[1,] #첫번째 행만 추출
exam[seq(1,10),] #첫번째 행부터 10번째 행까지 추출
exam[seq(0,20,by=2),] #짝수행만 추출
#열번호로 열 추출
exam[,1] # id
exam[,c(1:3)] #첫번째 열부터 3번째 열까지 추출
# 열 이름으로 여러개 열 추출
exam[,c("id","class","math")]
조건도 넣을 수 있음
# 같다 (==)
exam[exam$class ==1,]
# fiter이용하면 : exam %>% filter(class==1)
# 크거나 같다 = 이상 (>=)
exam[exam$english >= 97,]
# 조건 두 개 이상
# and
exam[exam$class == 3 & exam$science >= 50,]
# or
exam[exam$math > 70 | exam$science <= 30,]
exam[exam$class==1] 과 exam %>% filter(class==1)
같은 결과를 나타내줌
행과 열 동시 추출도 가능
행 번호& 열번호 : 이런식으로 써도 되고
행 조건& 열 이름
행 조건 & 열 여러개 다 가능하다
# 행, 변수 모두 인덱스
exam[1,3]
## [1] 50
# 행 인덱스, 열 변수명
exam[5, "english"]
## [1] 80
# 행 부등호 조건, 열 변수명
exam[exam$math >= 50, "english"]
## [1] 98 97 89 90 78 98 65 56 98 68 78 68 83
# 행 부등호 조건, 열 변수명
exam[exam$math >= 50, c("english", "science")]
## english science
## 1 98 50
## 2 97 60
## 6 89 98
## 7 90 45
## 8 78 25
## 10 98 45
## 11 65 65
## 15 56 78
## 16 98 65
## 17 68 98
## 18 78 90
## 19 68 87
## 20 83 58
문제 - 15장 323p
문제) 수학 점수 50 이상, 영어 점수 80 이상인 학생들을 대상으로 각 반의 전 과목 총평균을 구하라.
1) 내장 함수 인덱싱만 사용
subset <- exam[exam$math >= 50 & exam$english >=80,]
subset$total <- (subset$math + sebset$english + subset$science)
subset$mean_score <- subset$total/3
subset
2) 내장 함수 인덱싱 + aggregate 함수 사용
exam$total <- (exam$math + exam$english + exam$science)/3
aggregate(data = exam[exam$math >=50 & exam$english >= 80,],
total~class,
Fun="mean"]
aggregate함수를 통해 클래스별로 평균 구할 수 있음
Fun = "mean" : 평균 구하기
3) dplyr코드 파이프라인
exam %>%
filter(math >= 50 & english >= 80) %>% # 행 추출
mutate(total = (math + english + science)/3) %>% # 새로운 변수 생성
group_by(class) %>% # 그룹 생성
summarise(mean_score = mean(total)) # 요약 결과 생성 (예, 평균)
# group_by와 summarise는 짝꿍 (ex - 그룹별 평균보기)
내장함수를 쓸 때처럼, 굳이 subset를 저장하지 않아도 함수를 연결시킬 수 있음
'R' 카테고리의 다른 글
R - 데이터 정체 [결측치, 이상치] (0) | 2024.07.12 |
---|---|
R - 데이터 추출하기(dplyr : 문제 복습) (0) | 2024.07.11 |
R dplyr 패키지 이용하기 - %>% 파이프라인 연산자 (1) | 2024.07.08 |
R 기초문법 - 변수명 수정 rename, 조건문 ifelse (0) | 2024.07.08 |
R 기초문법 - 외부데이터 가져오기, csv 파일 읽기, text 파일 읽기 (0) | 2024.07.06 |