R 데이터 전처리 필수 함수 모음 - dplyr 내장 함수

728x90

데이터 전처리 필수 library인 dplyr의 내장 함수들

filter() #행 추출
select() #열(변수) 추출
arrange() #정렬 - sort
mutate() #변수 추가
summarise() #통계치 산출
group_by() #집단별로 나누기
left_join() #데이터 합치기 - left니까 열
bind_rows() #데이터 합치기 - 행

 

위의 함수들 사용법

 

1. filter

csv 파일을 하나 가져왔다고 가정을 하고

#class 가 1인 열만 불러오기
d %>% filter(class == 1)
#class가 1이 아닌 열만 불러오기
d %>% filter(class != 1)
# & = and 연산자
d %>% filter(math > 100 | english > 60)
# | or 연산자
d %>% filter(math > 60 & english > 60)
# match operator = %in%, or 연산자와 동일. class가 1,3,5중 하나라도 만족할 때
d %>% filter(class %in% c(1,2,3))

>%>는 pip operator 혹은 chain operator라고 불리는 특수문자 

이 문자의 의미는 다음 문장에 나올 모든 변수들은 이 특정 데이터프레임에서 나올 것이라고 미리 선언하는 것

RStudio의 단축키는 Ctrl+Shift+m

 

2.select

원하는 행, row를 추출할때 사용한다. 

dataframe의 이름을 지정하여 개별 출력

#math라는 열 전체 출력
d %>% select(math)
#다중 출력도 가능
d %>% select('math', 'english')
#특정 열 제외하고 출력
d %>% select(-'math')
#특정 열 다중 제외 가능
d %>% select(-'math', -'english')

#위에서 배운 filter와 select 혼용 사용 가능
d %>% filter(class == 1) %>% select('english')

#가독성 있게 위의 코드 변경
d %>%
  filter(class == 1) %>%
  select('english')

d %>% 
  select('english', 'math') %>% 
  head(10)

 

3. arrange

내림차순, 오름차순 정렬

#오름차순 정렬
#class와 math의 오름차순 정렬
#class를 오름차순 하고 math를 오름차순 한다 - 순서대로
d %>% arrange(class, math)
#내림차순 정렬
d %>% arrange(desc(class), desc(math))

 

4. mutate

파생변수 추가하기

예전에 했던 파생변수를 추가하는 방법은 

d$total2 <- d$math + d$english + d$science 

직접 $로 변수를 접근해서 넣었지만 mutate를 통해서 추가할 수도 있다.

d %>% mutate(total=math+english+science,
             mean=(math+english+science)/3,
             result=ifelse(math>60, "pass", "fail")
             ) %>% 
  #따로 할당을 안해도 바로 뒤에서 받아다가 재사용이 가능한 장점
  arrange(desc(total)) %>% 
  head(10)

mutate를 통해서 넣었기 때문에 $표시를 생략할 수 있어서 코드를 훨신 간결하게 만들 수 있다.

또한 여러 변수를 한번에 추가할 수 있고 ifelse라는 조건문도 붙여서 사용이 가능하다.

마지막으로 mutate를 사용하면 따로 변수를 할당하지 않아도 그 코드 안에서 만든 파생변수를 가져다 바로 쓸 수 있는 장점이 있다.

 

 

5. group_by

데이터 그룹화시키기

#주로 사용되는 요약통계량 함수
mean() #평균
sd() #표준편차
sum() #합계
median() #중앙값
min() #최소값
max() #최대값
n() #빈도
#전체 수학점수 평균 summarise
d %>%  summarise(mean_math = mean(math))

#클래스 별로 그룹화시킨 후 각각의 수학 평균값 구하기
d %>% group_by(class) %>% 
  summarise(mean_math = mean(math),
            max_math = max(math),
            #median = 중앙값
            median_math = median(math),
            #빈도 수 = n, 각각의 행의 개수
            #이 케이스는 총 학생의 수를 셌다고 보면 됨
            n = n())
#여러 객체별로 쪼갤때는 arrange와 같이 순서대로 나열된 대로 쪼개진다.
mpg %>% group_by(manufacturer, drv) %>% 
  summarise(mean_cty = mean(cty)) %>% 
  head(10)

 

6. left_join()

열, 좌우로 합치기

#데이터 합치기
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))

#id 기준으로, 즉 열인 좌우로 붙이기
total <- left_join(test1, test2, by='id')
total

 

7.bind_rows()

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))

#행으로 합쳐버리기
bind_rows(test1, test2)

 

728x90