[혼공R] 5주차_R

lets eat honeycombo·2025년 2월 10일
0

Chapter 05


1) dplyr 패키지


(1) dplyr 패키지 설치 및 로드하기


(a) dplyr 패키지 설치 및 로드하기

install.packages("dplyr")
library(dplyr)

(b) mtcars 데이터 세트 구조 확인하기


(2) 데이터 추출 및 정렬하기

2-1. 행 추출하기 : filter() 함수

filter(데이터, 조건문)

(a) 조건에 맞는 데이터 추출하기


(b) 두 가지 조건에 맞는 데이터를 필터링하기


2-2. 열 추출하기 : select() 함수

select(데이터, 변수명1, 변수명2, ....)

(a) 지정한 변수만 추출하기


2-3. 정렬하기 : arrange() 함수

arrange(데이터, 변수명1, 변수명2, ...) : 오름차순 정렬
arrange(데이터, 변수명1, 변수명2, ..., desc(변수명) : 내림차순 정렬

(a) 오름차순 정렬하기



(b) 오름차순 정렬한 후 내림차순 정렬하기


(3) 데이터 추가 및 중복 데이터 제거하기

3-1. 열 추가하기 : mutate() 함수

mutate(데이터, 추가할 변수 이름 = 조건1, ...)

(a) 새로운 열 추가하기



3-2. 중복 값 제거하기 : distinct() 함수

distinct(데이터, 변수명)

(a) 중복 값 제거하기


(b) 여러 개 열에서 중복 값 제거하기



(4) 데이터 요약 및 샘플 추출하기

4-1. 데이터 전체 요약하기 : summarise() 함수

summarise(데이터, 요약할 변수명 = 기술통계 함수) : summarize()로 작성해도 됨 !

(a) 데이터 요약하기



4-2. 그룹별로 요약하기 : group_by() 함수

group_by(데이터, 변수명)

(a) 그룹별로 요약하기



4-3. 샘플 추출하기 : sample_n(), sample_frac() 함수

sample_n(데이터, 샘플 추출할 개수) : 전체 데이터에서 샘플 데이터를 개수 기준으로 추출
sample_frac(데이터, 샘플 추출할 비율) : 전체 데이터에서 샘플 데이터를 비율 기준으로 추출

(a) 샘플 데이터 10개 추출하기


(b) 전체 데이터의 20%를 샘플로 추출하기


(5) 파이프 연산자 : %>%

데이터 세트 %>% 조건 또는 계산 %>% 데이터 세트
파이프 연산자 : 이름 그대로 파이프, 연결하여 연산하는 연산자

(a) 파이프 연산자로 그룹별 요약하기


(b) 파이프 연산자 없이 순위 기준으로 정렬하기


(c) 파이프 연산자를 사용하여 순위 기준으로 정렬하기


2) 데이터 가공하기

(1) 필요한 데이터 추출하기

library(dplyr)

library(readx1)
exdata1 <- read_Excel("C:/경로/Sample1.xlsx")
exdata1

1-1. 선택한 변수만 추출하기

select() 함수 : 데이터 세트에 있는 변수 중 필요한 변수만 추출 가능

(a) 선택한 변수 추출하기

exdata1 %>% select(ID)

(b) 선택한 변수 여러 개 추출하기

exdata1 %>% select(ID, AREA, Y21_CNT)

(c) 선택한 변수 제외하고 추출하기

exdata1 %>% select(-AREA)
exdata1 %>% select(-AREA, -Y21_CNT)

AREA, Y21_CNT 변수 2개 제외하고 추출


1-2. 필요한 데이터만 추출하기

(a) 조건에 만족하는 데이터만 추출하기

exdata1 %>% filter(AREA == '서울')
exdata1 %>% filter(AREA == '서울' & Y21_CNT >= 10)

조건 2가지 일 경우


(2) 데이터 정렬하기

arrange() 함수 : 변수 크기 순으로 정렬하여 새로운 데이터 만들거나 조회

(a) 오름차순 정렬하기

exdata1 %>% arrange(AGE)

(b) 내림차순 정렬하기

exdata1 %>% arrange(desc(Y21_AMT))

2-1. 중첩 정렬하기

(a) 중첩 정렬하기

exdata1 %>% arrange(AGE, desc(Y21_AMT))

쉼표(,)로 정렬


(3) 데이터 요약하기

(a) 변수 값 합산하기

exdata1 %>% summarise(TOT_Y21_AMT = sum(Y21_AMT))

3-1. 변수 값을 그룹별로 합산하기

exdata1 %>% group_by(AREA) %>% summarize(SUM_Y21_AMT = sum(Y21_AMT))

(4) 데이터 결합하기

4-1. 세로결합

bind_rows(테이블명, 테이블명)

(a) 엑셀 파일 불러오기

library(readxl)
m_history <- read_excel("C:/경로/Sample2_m_history.xlsx")
f_history <- read_excel("C:/경로/Sample3_f_history.xlsx")
View(m_history)
View(f_history)

(b) 테이블을 세로로 결합하기

exdata_bindjoin <- bind_rows(m_history, f_history)
View(exdata_bindjoin)

4-2. 가로 결합

  • left_join() 함수 : 지정한 변수와 테이블 1을 기준으로 테이블 2에 있는 나머지 변수 결합 left_join(테이블1, 테이블2, by = "변수명")
  • inner_join() 함수 : 테이블1과 테이블2에서 기준으로 지정한 변수 값이 동일할 때만 결합
    inner_join(테이블1, 테이블2, by = "변수명")
  • full_join() 함수 : 테이블1과 테이블2에서 기준으로 지정한 변수 값 전체 결합
    full_join(테이블1, 테이블2, by = "변수명")

(a) 엑셀파일 불러오기

library(readxl)
jeju_y21_history <- read_excel("C:/경로/Sample4_m_history.xlsx")
jeju_y20_history <- read_excel("C:/경로/Sample5_f_history.xlsx")
View(jeju_y21_history)
View(jeju_y20_history)

(b) 첫 번째 테이블 기준으로 가로 결합하기

bind_col <- left_join(jeju_y21_history, jeju_y_20_history, by = "ID)
View(bind_col)

(c) 키 변수가 동일할 때만 가로 결합하기

bind_col_inner <- inner_join(jeju_y21_history, jeju_y_20_history, by = "ID)
View(bind_col_inner)

(d) 키 변수를 기준으로 모두 가로 결합하기

bind_col_full <- full_join(jeju_y21_history, jeju_y_20_history, by = "ID)
View(bind_col_full)

3) 데이터 구조 변형하기

(1) 넓은 모양 데이터를 긴 모양으로 바꾸기 : melt() 함수

넓은 모양 데이터는 행보다 열이 많아 가로로 긴 모양의 행렬
이러한 행렬의 열을 행으로 바꾸어 세로로 길게 바꿀 떄 melt() 함수 사용


  • data : 변형할 데이터 세트 입력
  • na.rm = FALSE : 결측치를 제외하는 옵션. 결측치를 포함하려면 na.rm = TRUE 입력
  • value.name = "value" : 행으로 바꾸고 싶은 열 이름

melt(데이터, id.var = "기준 열", measure.vars = "변환 열"


(a) reshape2 패키지 설치하기

install.packages("reshape2")

(b) airquality 데이터 세트 확인하기

head(airquality)

1행에서 6행까지 출력 <-> tail() (반대)


(c) 변수명 소문자로 통일하기

names(airquality) <- tolower(names(airquality))
head(airquality)

names() : 변수명 구하기, tolower() : 소문자 치환


(d) 열을 행으로 바꾸기

library(reshape2)
melt_test <- melt(airquality)
head(melt_test)

(e) 기준을 정해 열을 행으로 바꾸기

melt_test2 <- melt(airqualuty, id_wars = c("month", "wind"), measure.wars = "ozone")
head(melt_test2)

month와 wind 변수를기준으로 데이터가 변형되어 오류 메시지 없이 ozone 값 출력


(2) 긴 모양 데이터를 넓은 모양으로 바꾸기: cast() 함수

세로로 길게 늘어진 데이터를 가로로 긴 형태의 데이터로 변형해야 할 때가 있음
cast() 함수 : 행을 열로 바꾸는 함수
melt() 함수 사용 시보다 다소 복잡하므로 꼼꼼하게 살펴보기 !


  • acast() : 데이터를 변형하여 벡터, 행렬, 배열 형태로 반환
  • dcast() : 데이터를 변형하여 데이터 프레임 형태로 반환

2-1. dacst() 함수

dcast(데이터, 기준 열 ~ 반환 열)

(a) 변수명 소문자로 통일하기

names(airquality) <- tolower(names(airquality))
head(airquality)

names() : 변수명 구하기, tolower() : 소문자 치환


(b) 열을 행으로 바꾸기

library(reshape2)
aq_melt <- melt(airquality, id.vars = c("month", "day"), na.rm = TRUE)
head(aq_melt)

(c) 행을 열로 바꾸기

aq_dcast <- dcast(aq_melt, month + day ~ variable)
head(aq_dcast)

변수 두개 식별자로 지정 할 때는 +기호 사용
생성한 변수 View() 함수 이용해서 확인해보기 !


2-2. acast() 함수

acast(데이터, 기준 열 ~ 반환 열 ~ 분리 기준 열)

acast(aq_melt, day ~ month ~ variable)

1일부터 31일까지, 5월부터 9월까지, 오존, 태양복사, 바람, 온도의 측정 값 출력
acast() 함수 이용하여 데이터 세트를 배열로 정리하면, 항목별로 한 눈에 비교하기 쉬움


(3) cast() 함수로 데이터 요약하기

cast() 함수 : 데이터 요약을 할 수 있는 것이 특징 !

(a) cast() 함수로 평균 요약 확인하기

acast(aq_melt, month ~ variable, mean)

(b) cast() 함수로 함계 요약 확인하기

acast(aq_melt, month ~ variable, sum)


4) 데이터 정제하기

(1) 결측치 확인하기

  • is.na() 함수 : 결측치를 확인하여 결괏값을 TRUE와 FALSE로 반환하여 결측치는 TRUE로 반환 is.na(변수명)
  • table(is.na())함수 : 결측치 빈도 확인. 결측치가 몇 개 있는지 개수 조회
    table(is.na(변수명))

(a) 결측치 확인하기


(2) 결측치 제외하기

데이터에 결측치가 있으면 연산을 해도 결과가 NA --> 연산에 문제 없도록 결측치를 제외하고 연산해야함
결측치 제외하는 방법 : na.rm = T 옵션


(3) 결측치 개수 확인하기

  • sum(is.na()) 함수 : 데이터 세트에 결측치가 총 몇 개인지 확인
    sum(is.na(변수명))
  • colSums(is.na()) 함수 : 각 컬럼의 결측치 개수 확인
    colSums(is.na(변수명))

(a) airquality 데이터 세트 결측치 확인하기

data(airquality)
is.na(airquality)

실행 결과에 TRUE 값 ==> 데이터 세트에 결측치 존재 !


(b) 데이터 세트에 있는 결측치 전체 개수 확인하기

sum(is.na(airquality))

(c) 컬럼별 결측치 개수 확인하기

colSums(is.na(airquality))

(4) 결측치 제거하기

na.omit(변수명) : 결측치가 있는 행 전체를 데이터 셋에서 제거 후 데이터 출력


(a) 결측치가 있는 행 제거하기

data(airquality)
na.omit(airquality)

(5) 결측치 대체하기

변수명[is.na(변수명)] <- 대체할 값

(a) 결측치 0으로 대체하기

data(airquality)
airquality[is.na(airquality)] <- 0
colSums(is.na(airquality))

(6) 이상치 확인하기

(a) 이상치 확인하기



(b) 상자 그림의 기술통계량 확인하기

boxplot(변수명)$stats


(6) 이상치 처리하기

ifelse(조건문, 조건이 참일 때 실행, 조건이 거짓일 때 실행)

(a) 이상치 확인하기

mtcars 데이터 셋 wt 칼럼에서 5.2500을 초과하는 값(>5.25)를 찾아요.


5) 숙제

1) 기본 숙제 : p. 244의 확인 문제 2번 풀고 인증하기

exdata1 테이블에서 AGE가 30세 이하이면서 Y20_CNT가 10건 이상인 데이터를 exdata2 테이블로 생성하는 코드를 작성하여 출력해보세요. (파이프 연산자 사용)

exdata2 <- exdata1 %>% filter(AGE >= 30 & Y20_CNT >= 10)
exdata2

2) 추가 숙제

1학년 1반, 2반, 3반 학생 5명씩의 중간고사와 기말고사 성적이 기록된 엑셀 파일을가져온 후 다음 실행 결과와 같이 반별 수학 점수와 영어 점수를 각각 출력해보세요.

library(readxl)
middle_mid_exam <- read_excel("C:/Rstudy/middle_mid_Exam.xlsx")
View(middle_mid_exam)

library(dplyr)
library(reshape2)

MATHEMATICS <- middle_mid_Exam %>% select(CLASS, ID, MATHEMATICS)
MATHEMATICS <- dcast(MATHEMATICS, ID ~ CLASS)
View(MATHEMATICS)

ENGLISH <- middle_mid_exam %>% select(CLASS, ID, ENGLISH)
ENGLISH <- dcast(ENGLISH, ID ~ CLASS)
View(ENGLISH)
profile
열심히해서 허니콤보 맨날 먹자 !

0개의 댓글

관련 채용 정보