일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 이행은이미다른
- 파이썬
- 장고
- 장고웹
- speechtoText
- Android
- 자바스크립트forinforof차이
- PostgreSQL
- 자바스크립트for문
- cmd명령어
- 자바스크립트날짜
- 개발
- 자바스크립트날짜형식
- 사례관리
- 안드로이드
- webkitrecognition
- 청소년복지론
- sqlite
- 장고웹프로젝트
- 이행은이미다른테이블에속해있습니다
- Python
- 자바스크립트수학
- speechAPI
- 다른테이블에속해있습니다
- R데이터분석
- 오류종류
- 장고프로젝트
- 자바스크립트날짜get
- forof문
- javaScriptError
- Today
- Total
EMDI는 지금도 개발중
R데이터분석 : 데이터 가공하기 filter, select, arrange, mutate 등 본문
1. 데이터 가공하기
* 해당 함수들도 전 글에서 사용했던 dplyr 함수입니다.
filter() : 행 추출
1) %>% 파이프 연산자 : ctrl + shift + m 단축키
ex) exam %>% filter(class == 1) #exam에서 class가 1인 경우만 추출해서 출력
filter를 이용해서 아래와 같이 출력할 수 있습니다.
그 외 쓸 수 있는 filter 조건
exam %>% filter(math > 50 & class == 1); #& and문
exam %>% filter(math > 50 | class != 1); #| or문
2) %in% 매치 연산자
ex) exam %>% filter(class %in% c(1, 3)); #1반, 3반에 해당하면 추출
* 위와 같이 여러 수를 적용시키려면 1, 3과 같이 단순 나열이 아닌 c(1, 3)으로 입력해야한다.
논리연산자 | 기능 | 산술연산자 | 기능 |
< | 작다 | + | 더하기 |
<= | 작거나 같다 | - | 빼기 |
> | 크다 | * | 곱하기 |
>= | 크거나 같다 | / | 나누기 |
== | 같다 | ^, ** | 제곱 |
!= | 같지 않다 | %/% | 나눗셈의 몫 |
| | 또는 | %% | 나눗셈의 나머지 |
& | 그리고 | ||
%in% | 매칭 확인 |
Q. mpg 데이터를 이용해서 분석문제를 해결하기
Q1) 자동차 배기량에 따라 고속도로 연비가 다른지 알아보려고 한다. displ(배기량)이 4이하인 자동차와 5이상인 자동차 중 어떤 자동차의 hwy(고속도로 연비)가 평균적으로 높은지 알아보기 단, filter()이용
displ(배기량)이 4이하인 자동차와 5이상인 자동차
displ_1 <- mpg %>% filter(mpg$displ <= 4);
displ_2 <- mpg %>% filter(mpg$displ >= 5);
떤 자동차의 hwy(고속도로 연비)가 평균적으로 높은지 알아보기
mean(displ_1$hwy); #결과값 : 25.96319
mean(displ_2$hwy); #결과값 : 18.07895
Q2) 자동차 제조 회사에 다라 도시 연비가 다른지 알아보려고 한다. "audi"와 "toyota" 중 어느 manufacturer(자동차 제조회사)의 cty(도시 연비)가 평균적으로 높은지 알아보시오.
"audi"와 "toyota" 중 어느 manufacturer(자동차 제조회사)의 cty(도시 연비)가 평균적
audi <- mpg %>% filter(mpg$manufacturer == "audi")
toyota <- mpg %>% filter(mpg$manufacturer == "toyota")
mean(audi$cty) #결과값 : 17.61111
mean(toyota$cty) #결과값 : 18.52941
Q3) "chevrolet", "ford", "honda" 자동차의 고속도로 연비 평균을 알아보려고 한다. 이회사들의 데이터를 추출한 뒤 hwy 전체 평균 구하시오.
"chevrolet", "ford", "honda" 자동차의 고속도로 연비 평균
car_avg <- mpg %>% filter(mpg$manufacturer == c("chevrolet", "ford", "honda")); //이건 잘못 사용한거인데 궁금함!
mean(car_avg$hwy); #r결과값 : 22.27778
car_avg <- mpg %>% filter(mpg$manufacturer %in% c("chevrolet", "ford", "honda")); //이게 정답
mean(car_avg$hwy); #r결과값 : 22.50943
select() : 열(변수) 추출
1) %>% 파이프 연산자 : ctrl + shift + m 단축키
ex) exam %>% select(math) #exam에서 math 데이터만 추출
ex) exam %>% select(english, math) #복수선택 가능
exam %>% select(-math) #math 제외
2) filter() 함수와 같이 쓸 때
exam %>% filter(class == 1) %>% select(math)
arrange() : 정렬
exam %>% arrange(id)
exam %>% arrange(math) #asc 오름차순
exam %>% arrange(desc(math)) #desc 내림차순
"audi"에서 생산한 자동차 중 어떤 자동차 모델의 hwy가 높은지 알아보기
mpg %>% filter(mpg$manufacturer == "audi") %>% arrange(desc(hwy)) %>% head(5)
mutate() : 변수 추가
* 전 글에서는 파생변수를 추가할 때 df$var_temp <- df$var1 + df$var2;로 만들었는데 이번 글에서는 mutate()를 사용해서 만듭니다.
// 바로 exam 데이터 프레임에 변수를 만들고 그 안에 데이터를 넣는 형식
exam$total_dol <- (exam$math + exam$english + exam$science);
// 바로 exam 데이터 프레임에 변수 만들기 및 commit은 아니고 추가되었을 때의 형태만 보여줌
exam %>% mutate(total_mut = math + english + science);
//mutate() 괄호 안에 여러 파생변수를 한번에 추가할 수 있다.
exam %>% mutate(total_mut = math + english + science,
mean_mut = (math + english + science) / 3);
// ifesle 조건문을 가지고 패스, 패일을 구분할 수 있다.
exam %>% mutate(science_result = ifelse(science >= 60, "pass", "fail")) %>% head(5)
// mutate()와 arrange()를 같이 사용하여 총점수가 제일 높은 것 순으로 5위까지 구하기
exam %>% mutate(total_mut = math + english + science) %>% arrange(desc(total_mut)) %>% head(5)
summarise() : 통계치 산출
exam %>% summarise(mean_math = mean(math)) #결과값 : 51.36364
* summarise는 group_by()와 조합해 요약할 수 있습니다.
exam %>% group_by(class) %>% summarise(mean_math = mean(math))
함수 | 의미 |
mean() | 평균 |
sd() | 표준편차 |
sum() | 합계 |
median() | 중앙값 |
min() | 최솟값 |
max() | 최댓값 |
n() | 빈도 |
group_by() : 집단별로 나누기
Q. mpg 데이터를 이용하여 회사별로 "suv" 자동차의 도시 및 고속도로 통합 연비 평균을 구해 내림차순으로 정렬하고, 1~5위까지 출력하기
// 틀린 답
mpg %>%
group_by(manufacturer) %>%
filter(class == "suv") %>%
mutate(total_ch = (cty + hwy)
, mean_ch = mean(total_ch)) %>%
arrange(desc(mean_ch)) %>%
head(5)
// 수정한 정답
mpg %>%
group_by(manufacturer) %>%
filter(class == "suv") %>%
mutate(total_ch = (cty + hwy)/2) %>%
summarise(mean_ch = mean(total_ch)) %>%
arrange(desc(mean_ch)) %>%
head(5)
가로로 합치기 vs 세로로 합치기
1) 가로로 합치기 (by 사용) left_join() : 데이터 합치기(열)
* by에 기준 변수를 지정할 때 변수명 앞뒤에 따옴표를 입력해야합니다.
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")
# id를 기준으로 합쳐 total에 할당
2) 세로로 합치기 (bind_rows() 사용) bind_rows() : 데이터 합치기(행)
test3 <- data.frame(id = c(6,7,8,9),
midterm = c(60,70,80,90),
final = c(50,40,80,70))
group_all <- bind_rows(total, test3);
'IT > R 데이터분석' 카테고리의 다른 글
R데이터분석 : 데이터 정제, 이상한 데이터 제거하기 (이상치 정제) (0) | 2019.09.30 |
---|---|
R데이터분석 : 데이터 정제, 빠진 데이터 제거하기 (결측치 정제) (0) | 2019.09.23 |
R데이터분석 : 데이터 파악하기 (0) | 2019.09.16 |
R데이터분석 : 데이터 프레임 만들기 (0) | 2019.08.29 |
R 데이터분석 : 변수 만들기 및 사용하기 (0) | 2019.08.27 |