R 프로그래밍 _ 'dplyr' 패키지

13922 단어 2021.032021.03

R 프로그램 필수 패키지 dplyr

오늘배운 dplyr 패키지를 정리해 보자!!

함수명형태기능
%>%dataframe %>% 함수() %>% 함수()...필요한 함수를 순차적으로 적용할 경우 사용할 수 있는 연산자.
tbl_df()tbl_df(데이터셋)콘솔 창의 크기만큼 데이터 셋을 추출하는 기능
filter()filter(dataframe, 조건1, 조건2)조건에 맞는 데이터 셋을 추출하는 기능
arrange()arrange(dataframe, 칼럼1,...) desc(칼럼2)= 내림차순데이터셋의 특정 칼럼으로 정렬하는 기능
select()selesct(dataframe, 칼럼1,...)데이터셋을 대상으로 칼럼을 선택하는 기능
mutate()mutate(dataframe, 칼럼1 = 수식1, 칼럼2 = 수식2...)새로운 칼럼을 추가하는 기능
summarise()summarise(dataframe, 추가할 칼럼명 = 함수(칼럼명),...)특정 칼럼을 추가하는 기능
group_by()group_by(dataframe, 집단변수)집단변수을 이용하여 그룹화하는 기능
inner_join()inner_join(df1, df2, 공통변수)df1 과 df2 모두 x칼럼이 존재하는 관측치만 병합한다.
left_join()left_join(df1, df2, 공통변수)왼쪽 df1의 x 칼럼을 기준으로 병합한다.
right_join()right_join(df1, df2, 공통변수)오른쪽 df2의 x 칼럼을 기준으로 병합한다.
full_join()full_join(df1, df2, 공통변수)df1 과 df2 모두 x칼이 있으면 병합한다.
bind_rows()bind_rows(df1, df2)행 단위로 데이터프레임을 합치는 기능
bind_cols()bind_cols(df1, df2, 공통변수)열 단위로 데이터프레임을 합치는 기능
renames()rename(데이터프레임, 변경후 칼럼명 = 변경전 칼럼명)칼럼 이름을 변경하는 기능

제일많이 사용하는 패키지와 함수 입니다. 암기 필수!! 🙀


파이프 연산자(%>%)

' 형식: dataframe %>% 함수1() %>% 함수2() '

  • %>% 연산자는 인수를 함수에 편하게 적용할 수 있다.
  • %>% 연산자의 >(라이트 앵글 브래킷) 기호는 방향의 의미로 왼쪽에 있는 인자를 오른쪽에 있는 함수에 집어넣는 것이 파이프라인의 기능이다.
  • %>% 연산자를 사용하면 여러 가지 함수를 한 번에 사용할 수 있다.
  • %>% 함수의 큰 장점은 한 번에 한 줄로 코드를 사용할 수 있으므로 함수를 사용할 때마다 따로 저장하는 과정이 없이 여러 함수를 실행할 수 있는 편리성에 있다.
  • %>% 연산자에서 왼쪽 %(퍼센트)를 LHS(Left Hand Side) 변수라고 하며 오른쪽 %(퍼센트)를 RHS(Right Hand Side) 변수라고 한다.
library(dplyr)
csvgrade <- read.csv("grade_csv.csv")
csvgrade %>% head( ) %>% summary( )

' %>% 함수의 도트(.) 연산자 '

  • 도트(.) 연산자를 사용하여 LHS가 들어갈 위치를 정할 수 있다.
  • 도트(.) 연산자는 저장한 인자의 이름을 다시 쓰지 않고 데이터를 사용할 수 있다.
library(dplyr)
# 1:5의 인자를 다시 쓰지 않고 사용할 수 있으며 sum 함수로 호출한다. 
1:5 %>% sum(.)
# length 함수에 의해서 길이인 5까지 더해져서 20을 반환한다. 
1:5 %>% sum(length(.))
# sum(length(1:5))와 같이 수열을 지정하여 반환하므로 수열의 길이인 5까지 더해서 20을 반환한다.
5 %>% sum(1:.)
# { }(브레이스)를 적용하면 함수를 한 번씩만 실행한다. 
5 %>% {sum(1:.)}
csvgrade <- read.csv("grade_csv.csv")
# 1부터 행의 수만큼 수열로 출력하고 나눈 나머지가 0인 행의 부분집합을 추출한다. csvgrade %>% subset(1:nrow(.) %% 2 == 0)

tbl_df()

' tbl_df()함수 '

  • 데이터 셋을 대상으로 콘솔 창의 크기에 맞게 데이터를 추출하고, 나머지는 축약형으로 제공
hflights <- hflights %>% tbl_df() 

filter()

' filter(dataframe, 조건1, 조건2) '

  • == 연산자를 적용하여 객체의 특정값을 호출한다.
  • != 연산자를 적용하여 객체의 특정값인 아닌 나머지 값들을 호출한다.
  • > 연산자를 적용하여 객체의 특정값 초과인 값들을 호출한다
  • < 연산자를 적용하여 객체의 특정값 미만인 값들을 호출한다.
  • >= 연산자를 적용하여 객체의 특정값 이상인 값들을 호출한다.
  • <= 연산자를 적용하여 객체의 특정값 이하인 값들을 호출한다.
  • & 연산자는 객체를 평가하고 객체 모두 TRUE일 때 TRUE로 평가하고 그렇지 않으면 FALSE로 평가한다.
  • | 연산자를 적용하여 여러 조건 중 하나 이상 충족하는 행을 추출한다.
library(dplyr)
csvgrade <- read.csv("grade_csv.csv") csvgrade %>% filter(class == 1)
csvgrade %>% filter(class != 1)
csvgrade %>% filter(math > 50)
csvgrade %>% filter(math < 50)
csvgrade %>% filter(english >= 80)
csvgrade %>% filter(english <= 80)
csvgrade %>% filter(class == 1 & math >= 50)
csvgrade %>% filter(english < 90 | science < 50)
csvgrade %>% filter(class == 1 | class == 3 | class == 5)

%in% 연산자

  • %in% 연산자는 값의 포함 여부를 확인하고 반환한다.
  • %in% 연산자는 여러 객체에서 여러 조건을 줄 때는 사용할 수 없다.
library(dplyr)
csvgrade <- read.csv("grade_csv.csv") 
csvgrade %>% filter(class %in% c(1, 3, 5))

filter()

  • 필터링한 데이터의 객체를 생성한다.
  • 데이터의 객체를 생성하여 반환한다.
library(dplyr)
csvgrade <- read.csv("grade_csv.csv")
# 객체 생성
class1 <- csvgrade %>% filter(class == 1)
# class1 객체의 math 컬럼에 접근하여 평균 산출 mean(class1$math)
# class1 객체의 english 컬럼에 접근하여 평균 산출 mean(class1$english)
# class1 객체의 science 컬럼에 접근하여 평균 산출 mean(class1$science)

파이프연산자(%>%)사용하여 hflights_df데이터 셋에 filter()함수 적용:

hflights_df %>% filter(Month ==1 & DayofMonth ==1) 형식

arrange()

' arrange(dataframe, 칼럼1,...) desc(칼럼2)= 내림차순 '

파이프 연산자를 사용하여 hflights_df 데이터 셋에 arrange()함수 적용: hflights_df %>% arrange(yes, Month, DepTime, AirTime) 형식

  • arrange 함수를 이용하여 다중 객체의 데이터를 ,(콤마)로 기준으로 오름차순으로 정렬하며 추출한다.
  • arrange 함수를 이용하여 데이터를 내림차순으로 정렬하여 추출하려면 기준 객체에 desc() 함수를 적용한다.
library(dplyr)
csvgrade <- read.csv("grade_csv.csv") 
csvgrade %>% arrange(desc(math))

csvgrade %>% arrange(class, math)

select()

' 형식: select(dataframe, 컬럼1, 컬럼2, ...) '

  • select() 함수의 인자에 ,(콤마)를 활용하여 여러 객체를 추출한다.
  • select() 함수의 인자에 -(마이너스) 연산자를 활용하여 객체 제외하고 추출한다.
  • select() 함수 사용시 특정 컬럼만이 아닌 컬럼의 범위 설정 가능 검색조건으로 시작걸럼:종료컬럼 형식으로 컬럼 범위의 시작과 끝을 지정
library(dplyr)
csvgrade <- read.csv("grade_csv.csv") 
csvgrade %>% select(class, math)

mutate()

' 형식: mutate(dataframe, 컬럼명1=수식1, 컬럼명2=수식2, ...) '

  • 데이터 셋에 특정 컬럼을 추가
  • console 참 크기 이외의 컬럼명 확인이 어려운 경우 select()함수 안에 mutate()함수 사용
hflights_df %>% mutate(gain = ArrDelay – DepDelay, gain_per_hour = gain / (AirTime / 60))

summarise()

' 형식: summarise(dataframe, 추가할 컬럼명 = 함수(컬럼명), ...) '

  • 컬럼의 평균과 같이 컬럼을 요약한 통계량을 구할 때는 summarise() 함수와 group_by() 함수를 사용한다.
  • 전체의 평균, 표준편차, 사분위수 등 전체적인 값들에 대한 요약 통계량을 산출할 때는 summary 함수를 사용하고, 개별 컬럼의 데이터에 대한 요약 통계량을 구할 때는 summarise 함수를 사용한다.
  • 결과를 요약표로 만들면 컬럼의 집단 간에 어떤 차이가 있고 어떤 분포를 갖는지 쉽게 파악할 수 있다.
  • 그룹으로 나눈 데이터는 다른 분석에도 사용할 수 있으므로 활용도가 매우 높다.
library(dplyr)
csvgrade <- read.csv("grade_csv.csv")
csvgrade %>% summarise(mean_math = mean(math))
hflights_df %>% summarise(avgAirTime = mean(AirTime, na.rm=TRUE))

group_by()

' 형식: group_by(dataframe, 집단변수) '

  • 컬럼의 집단별 평균에 대한 요약 통계량을 반환한다.
library(dplyr)
csvgrade <- read.csv("grade_csv.csv")
csvgrade %>% group_by(class) %>% summarise(mean_math = mean(math))

join()

' inner_join(df1, df2, x), left_join(df1, df2, x), right_join(df1, df2, x), full_join(df1, df2, x) '

  • inner_join 함수는 키를 기준으로 열에서 일치하는 열만 결합한다.
    • 형식: inner_join(dataframe1, dataframe2, 공통변수)
    • inner_join(A, B, by = key)
  • left_join 함수는 키를 기준으로 왼쪽 열을 결합한다.
    • 형식: left_join(dataframe1, dataframe2, 공통변수)
    • left_join(A, B, by = key)
  • right_join 함수는 키를 기준으로 오른쪽 열을 결합한다.
    • 형식: right_join(dataframe1, dataframe2, 공통변수)
    • right_join(A, B, by = key)
  • full_join 함수는 키를 기준으로 모든 열을 결합한다.
    • 다른 한쪽의 데이터프레임에서 x의 값이 없는 경우 결측치(NA)로 나타난다.
    • 형식: full_join(dataframe1, dataframe2, 공통변수)
    • full_join(A, B, by = key)

bind()

가로

' 형식: bind_rows(dataframe1, dataframe2) '

  • bind_rows 함수로 나뉘어져 있는 데이터를 가로로 결합할 수 있다.
library(dplyr)
a <- data.frame(id = c(1, 2, 3, 4, 5), score = c(60, 80, 70, 90, 85)) 
b <- data.frame(id = c(3, 4, 5, 6, 7), weight = c(80, 90, 85, 60, 85)) # 세로로 결합한다.
bind_rows(a, b)

' 형식: rbind(a, b) '

  • rbind 함수로 행을 결합하여 반환한다.
  • rbind 함수로 행을 결합하기 위해서는 Data Frame의 열 개수, 칼럼 이름이 같아야 한다
a <- data.frame(id = c(1, 2, 3, 4, 5), score = c(60, 80, 70, 90, 85))
b <- data.frame(id = c(6, 7 , 8), score = c(80, 90, 85))
rbind(a, b)

세로

' 형식: bind_cols(dataframe1, dataframe2) '

  • cbind 함수로 열을 결합하여 반환한다.
  • cbind 함수로 열을 결합하기 위해서는 Data Frame의 행 개수가 서로 같아야 한다.
library(dplyr)
a <- data.frame(id = c(1, 2, 3, 4, 5), score = c(60, 80, 70, 90, 85)) b <- data.frame(id = c(3, 4, 5, 6, 7), weight = c(80, 90, 85, 60, 85)) # 세로로 결합한다.
bind_rows(a, b)

' 형식: cbind(a,b) '

a <- data.frame(id = c(1, 2, 3, 4, 5), score = c(60, 80, 70, 90, 85))
b <- data.frame(age = c(20, 19 , 20, 19, 21), weight = c(80, 90, 85, 60, 85))
cbind(a, b)

marge()

' 형식: merge(A, B, by = key, all = FALSE, all.x = all, all.y = all) 함수'

  • merge 함수는 키를 기준으로 열을 결합하여 반환한다.
    • A 매개변수: 객체를 설정한다.
    • B 매개변수: 객체를 설정한다.
    • by 옵션: 결합할 기준이 되는 칼럼을 설정한다.
    • all 옵션: 모든 열을 결합하며 기본값은 FALSE다.
    • all.x 옵션: A 객체를 기준으로 열을 결합한다.
    • all.y 옵션: B 객체를 기준으로 열을 결합한다.

rename()

' 형식: rename(데이터프레임, 변경후컬럼명 = 변경전컬럼명) '

-데이터프레임을 구성하는 컬럼명을 수정하는 rename()함수 사용

df <- data.frame(one = c(4, 3, 8)) 
df <- rename(df, "원" = one) 

좋은 웹페이지 즐겨찾기