[Fast campus] Data Science with R 1기 - 이부일 강사님
R 공부하면서 배운 내용 복습 겸 정리하는 곳입니다.
6. 새로운 변수 만들기
# 데이터$변수명 = 연산(수식)
# bmi 수치를 계산해서 새로운 변수로 추가
1 | student$bmi = student$weight / ((student$height/100)^2) | cs |
# ifelse(조건, 참일 때 표현식, 거짓일 때 표현식)
# 30대 이상 / 20대 이하를 나타내는 새로운 변수(age_group)를 추가
1 | student$age_group = ifelse(student$age >= 30, "30대 이상", "20대 이하") | cs |
# 20대 초반, 20대 중반, 30대 이상으로 나뉘는 age_group2를 만들어라
1 2 | student$age_group = ifelse(student$age >= 30, "30대 이상", ifelse(student$age >= 25, "20대 중반", "20대 초반") |
# cut(데이터명$변수명, breaks = 구간정보) => numeric data에 적용
경도 비만(1단계 비만) : 25 - 30
과체중 : 23 - 24.9
정상 : 18.5 - 22.9
저체중 : 18.5 미만
1 2 | student$bmi_group = cut(student$bmi, breaks = c(0, 18.5, 23, 25, 30)) | cs |
# 데이터의 결과를 보면 ( ] 와 같이 소괄호 괄호로 표현된다
# (18.5, 23] => 18.5 초과 23이하
# ( ) 소괄호는 초과
# [ ] 대괄호는 이하
# 0과 30 초과 값들은 NA로 입력이됨
# 위 코드에 right = FALSE 라는 argument 를 추가해보자
1 2 3 | student$bmi_group = cut(student$bmi, breaks = c(0, 18.5, 23, 25, 30), right = FALSE) | cs |
# right = FALSE 를 하게되면 괄호의 위치가 바뀌게 됨
# [18.5, 23) => 18.5 이상 23미만
# 30 이상의 값들은 NA로 표시됨
# 각 행들의 평균 구하기
1 | score$avg = rowMeans(score[ , 2:6]) | cs |
# 각 열들의 평균은 colMeans( )
7. 데이터의 값을 수정하기
# home 이라는 데이터
1 2 3 4 5 6 7 8 9 10 11 | > home # A tibble: 7 x 4 id room price area <dbl> <dbl> <dbl> <dbl> 1 1 1 40 13 2 2 4 50000 55 3 3 3 20000 35 4 4 3 50000 35 5 5 1 43 2 6 6 4 50000 45 7 7 1 500 15 | cs |
1 2 3 4 5 6 7 8 9 10 11 12 | > home[home$price == 500, "price"] = 50 > home # A tibble: 7 x 4 id room price area <dbl> <dbl> <dbl> <dbl> 1 1 1 40 1 2 2 4 50000 55 3 3 3 20000 35 4 4 3 50000 35 5 5 1 43 2 6 6 4 50000 45 7 7 1 50 15 | cs |
8. 데이터 정렬하기
(1) 벡터를 정렬하기 : sort(벡터, decreasing = )
# 기본값 = 오름차순
1 2 3 4 5 6 | > money = c(45, 50, 40, 50, 50, 30, 500) > sort(money) [1] 30 40 45 50 50 50 500 > sort(money, decreasing = TRUE) [1] 500 50 50 50 45 40 30 | cs |
(2) order(데이터명$변수명, decreasing = )
# sort는 벡터에서만 사용가능
# data.frame에서는 order 함수를 사용
1 2 | > order(money) [1] 6 3 1 2 4 5 7 | cs |
# order는 정렬될 인덱스를 알려준다.
# data.frame에서 데이터 정렬은 행이 바뀌는 것
# 슬라이싱의 행 자리에 order가 들어간다.
# 성별 내림차순
1 | student[ order(student$height, decreasing = TRUE) , ] | cs |
# 성별 내림차순 / 키 내림차순
1 | student[ order(student$gender, student$height, decreasing = TRUE ) , ] | cs |
# 성별 오름차순 / 키 내림차순
# 조건이 다르니 -를 사용
1 | student[ order(student$gender, -student$height) , ] | cs |
# 성별 내림차순 / 키 오름차순
# - 는 numeric에만 적용 가능
1 | student[ order(student$gender, -student$height, decreasing = TRUE ) , ] | cs |
# 성별 오름차순 / 거주지 내림차순
# character 타입의 데이터를 따로 정렬하려면?
# - 는 numeric에만 적용된다 => 기본 기능에서는 불가능
# data.table 패키지를 사용하여 데이터를 data.table로 변경
1 | studentDT = as.data.table(student), ] | cs |
1 | studentDT[ order(gender, -address) , ] | cs |
# 데이터의 column에 바로 접근 가능
# 결과를 콘솔 화면에 보여주기만 함
1 | setorder(studentDT, gender, -address) | cs |
# setorder( ) 를 사용하면 데이터를 정렬해서 결과 저장
※ data.frame vs data.table 참고
http://using.tistory.com/81
# data.table()_cheet sheet 확인
# setkey(), J(), fread() 공부
9. 데이터 합치기
(1) rbind(데이터1, 데이터2, ... ) => 위, 아래로 데이터 합치기
(2) merge(데이터1, 데이터2, ..., by=, all=, all.x=, all.y=)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | > df4 = data.frame(id = c(1, 2, 4, 7), + age = c(10, 20, 40, 70)) > df5 = data.frame(id = c(1, 2, 3, 6, 10), + gender = c("M", "M", "F", "M", "F")) > df4;df5 id age 1 1 10 2 2 20 3 4 40 4 7 70 id gender 1 1 M 2 2 M 3 3 F 4 6 M 5 10 F | cs |
# merge 4가지 방법
① inner join(교집합)
# inner join은 2가지 데이터만, 3가지 이상은 다른 기능으로
# by는 PK(Primary Key) => 데이터를 구분해주는 값
# PK 예) 사람-주민등록번호, 회사직원-사원
1 2 3 4 | > merge(df4, df5, by="id") id age gender 1 1 10 M 2 2 20 M | cs |
# outer join
② full join(합집합) - all=TRUE
1 2 3 4 5 6 7 8 9 | > merge(df4, df5, by="id", all=TRUE) id age gender 1 1 10 M 2 2 20 M 3 3 NA F 4 4 40 <NA> 5 6 NA M 6 7 70 <NA> 7 10 NA F | cs |
# R에서 숫자는 NA / 문자는<NA>로 표시해서 구분해준다.
③ left join - all.x=TRUE
1 2 3 4 5 6 | > merge(df4, df5, by="id", all.x=TRUE) id age gender 1 1 10 M 2 2 20 M 3 4 40 <NA> 4 7 70 <NA> | cs |
④ right join - all.y=TRUE
1 2 3 4 5 6 7 | > merge(df4, df5, by="id", all.y=TRUE) id age gender 1 1 10 M 2 2 20 M 3 3 NA F 4 6 NA M 5 10 NA F | cs |
10. R데이터 저장하기
(1) 외부 데이터로 저장하기
1 2 3 | write.csv(student, file = "fs/data/student.csv", row.names = FALSE) | cs |
# row.names = FALSE 를 주게되면 행 이름은 저장하지 않음
(2) R데이터로 저장하기
1 | save(R데이터, file = "파일위치/파일명.RData") | cs |
(3) R데이터 불러오기
1 | load(file = "파일위치/파일명.RData") | cs |
'Programming > R' 카테고리의 다른 글
[Fast campus] 09. 기초 데이터 분석(hflights) (0) | 2017.08.02 |
---|---|
[Fast campus] 08. 유틸리티(반복, 조건, 사용자 함수) (0) | 2017.07.24 |
[Fast campus] 06. 데이터 핸들링 1 (0) | 2017.07.20 |
[Fast campus] 05. 외부 데이터 읽어오기 (0) | 2017.07.19 |
[Fast campus] 04. 데이터의 유형(Type of Data) - 배열(Array), 데이터 프레임(Data.Frame), 리스트(List) (0) | 2017.07.19 |