4 분 소요

데이터전처리 패키지: dplyr

  • chain function : %>% 파이프연산자를 사용하여 매우 직관적임
  • 코드 가독성이 높음
  • 코드 유지보수가 용이함
  • 매우 빠른 속도
# 일반적인 코드				
> 함수3(함수2(함수1(df,x),y,z))				
# dplyr을 사용한 코드				
> df %>%				
    함수1(x) %>%				
    함수2(x) %>%				
    함수3(x) %>%				
    ...				


filter

> df %>% filter(조건)			

데이터 내에서 조건을 만족하는 행을 선택하여 출력

# 일반적인 코드				
## 성별이 남자인 데이터만 추출				
> df[gender == "M", ]				
# dplyr을 사용한 코드				
## 성별이 남자인 데이터만 추출				
> df %>%				
    filter(gender == "M")				
                
## 성별이 남자이면서 점수가 90점 이상인 데이터만 추출				
> df %>%				
    filter(gender == "M" & score >= 90)				


select

> df %>% select()
  • 원하는 컬럼만 선택하여 출력
  • 사용법
    • 데이터에서 컬럼A를 출력
      • df %>% select(컬럼A)
    • 데이터에서 컬럼A를 제외하고 출력
      • df %>% select(-컬럼A)
# df에서 컬럼 colA들 값 출력				
> df %>%				
    select(colA)				
                
# df에서 컬럼 colA~ colD들 값 출력				
> df %>%				
    select(colA : colD)				
                
# df에서 컬럼 colA와 colB를 제외하고 출력				
> df %>%				
    select(-colA, colB)				


arrange

> df %>% arrange()
  • 데이터를 오름/내림차순으로 정렬
  • 사용법
    • 컬럼을 기준으로 오름차순 정렬
      • df %>% arrange(컬럼)
    • 컬럼을 기준으로 내림차순 정렬
      • df %>% arrange(desc(컬럼))
# id 기준으로 오름차순 정렬
> df %>%
    arrange(id)

# dept_no로 먼저 오름차순 정렬,
# dept_no가 같을 경우에는 join_date로 내림차순 정렬
> df %>%
    arrange(dept_no, desc(join_date))


distinct

> df %>% distinct()
  • 데이터 내에서 중복된 값을 제거하고 출력
  • 사용법
    • 데이터 내의 해당 컬럼의 중복된 값 제거하고, 해당 컬럼만 출력
      • df %>% distinct(컬럼)
    • 데이터 내의 해당 컬럼의 중복된 값을 제거하고, 모든 행 출력
      • df %>% distinct(컬럼, .keep_all = TRUE)
    • 데이터 내의 해당 중복된 행을 제거하고 출력
      • df %>% distinct()


group_bysummarize

> df %>% group_by() %>% summarize()
  • 데이터 내에서 특정 컬럼을 기준으로 요약한 값 출력
  • 사용법
    • df %>% group_by(컬럼1) %>% summarize(함수(컬럼2))
    • 데이터를 컬럼1을 기준으로, 컬럼2를 함수로 집계
# 다음 두 줄은 같은 결과값을 출력함
> mean(df$base)
> df %>% summarize(mean(basse))
# 각 성별의 개수 출력				
> df %>%				
    group_by(gender) %>%				
    summarize(n())				
                
# 각 성별의 평균 점수 출력				
> df %>%				
    group_by(gender) %>%				
    summarize(mean(score))				
                
# 각 성별의 평균 점수와 합계 점수를 출력				
##평균 점수는 컬럼명(avg), 합계 점수는 컬럼명(sum)으로 출력				
> df %>%				
    group_by(gender) %>%				
    summarize(avg = mean(score),				
    sum = sum(score))

# 여러개의 컬럼을 그룹화하기
> df %>%
    group_by(gender, dept_no) %>%
    summarize(avg_base = mean(base))


mutate

> df %>% mutate()
  • 새로운 컬럼 생성
  • 사용법
    • df %>% mutate(새로운 컬럼명 = 값1)
    • 값1을 갖는 새로운 컬럼을 생성
# 일반적인 코드
## 각각의 컬럼을 따로 생성
> df$total <- df$base + df$bonus
> df$special_bonus <- df$base * 0.1
# dplyr을 사용한 코드
> df %>%
    mutate(total = base + bonus,
           special_bonus = total * 0.1)			


sample_nsample_frac

> df %>% sample_n()
> df %>% sample_frac()
  • 데이터에서 행을 랜덤 샘플링 후 출력
  • 사용법
    • 숫자만큼의 행을 랜덤 샘플링
      • df %>% sample_n(숫자)
    • 비율만큼의 행을 랜덤 샘플링
      • df %>% sample_n(비율)
# 10개의 행을 랜덤으로 뽑아서 출력				
> df %>%				
    sample_n(10)				
                
# 전체 데이터에서 30%의 행을 랜덤으로 뽑아서 출력				
> df %>%				
    sample_frac(0.3)				


bind_rowsbind_cols

bind_rows

> df1 %>% bind_rows(df2)
  • 데이터를 행으로 결합
  • rbind() 함수에서 불가능한 것이 가능함
  • 빈 값은 NA로 채움
  • 열의 순서가 달라도 결합이 됨
  • 사용법
    • df1과 df2를 행으로 결합(아래로 이어붙임)
    • df1 %>% bind_rows(df2)


bind_cols

> df1 %>% bind_cols(df2)
  • 데이터를 열방향으로 결합
  • 사용법
    • df1과 df2를 열방향 결합(옆으로 이어붙임)
    • df1 %>% bind_cols(df2)


join 함수

  • 두 개의 data frame을 결합하고자 할 때

inner_join

> df1 %>% inner_join(df2)
  • 특정 컬럼을 기준으로 결합(교집합)
  • 사용법
    • df1과 df2를 기준열에 맞추어 교집행만 살려서 결합
    • 만약 기준열이 같을 경우 by 인자는 생략 가능
    • df1 %>% inner_join(df2, by = c(“df1의 기준열 = df2의 기준열”))


full_join

> df1 %>% full_join(df2)
  • 특정 컬럼을 기준으로 결합(합집합)
  • 사용법
    • df1과 df2를 기준열에 맞추어 모든 행을 살려서 결합
    • 만약 기준열이 같을 경우 by 인자는 생략 가능
    • df1 %>% full_join(df2, by = c(“df1의 기준열 = df2의 기준열”))


left_join / right_join

> df1 %>% left_join(df2)
> df1 %>% right_join(df2)
  • 특정 컬럼을 기준으로 결합
  • 사용법
    ◎ left_join
    • df1과 df2를 기준열에 맞추어 df1의 행은 모두 살려서 결합
    • df1 %>% left_join(df2, by = c(“df1의 기준열 = df2의 기준열”))

    ◎ right_join

    • df1과 df2를 기준열에 맞추어 df2의 행은 모두 살려서 결합
    • df1 %>% right_join(df2, by = c(“df1의 기준열 = df2의 기준열”))


anti_join

> df1 %>% anti_join(df2)
  • 두 개의 data frame을 비교하여 첫 번째 data frame에는 있지만 두 번째 data frame에는 없는 행들을 반환
  • 두 data frame을 결합하여 두 번째 data frame에는 없는 행들을 제거하는 역할
  • 사용법
    • df1 %>% anti_join(df2, by = c(“df1의 기준열 = df2의 기준열”))


Set Operation 함수

  • 여러개의 값이 같을 때 결합하고 싶으면

union

> union(df1, df2)
  • rbind는 단순히 데이터를 아래로 이어 붙였다면, union함수는 중복된 행은 제거하고 붙임 (합집합)
  • 두 data frame의 컬럼명 순서에 영향을 받지 않음. 단, 컬럼명은 동일해야 함
  • 사용법
    • df1과 df2를 rbind하여 중복된 행은 제거함
    • union(df1, df2)


intersect

> intersect(df1, df2)
  • 두 개의 data frame의 중복된 행 출력
  • 두 data frame의 컬럼명 순서에 영향을 받지 않음. 단, 컬럼명은 동일해야 함


setdiff

> setdiff(df1, df2)
  • 두 개의 data frame의 차집합
  • 두 data frame의 컬럼명 순서에 영향을 받지 않음. 단, 컬럼명은 동일해야 함


all.equal

> all.equal(df1, df2)
  • 두 data frame이 완전히 동일한지를 check
  • 두 data frame의 컬럼 순서가 다르면, 무엇이 얼마나 다른지 알려줌.


lead() / lag()

lead()

  • 값을 위로 올림
  • 사용법
    • lead(df$colA) # vector 출력
> df %>%
    mutate(next_colA = lead(colA))


lag()

  • 값을 아래로 한칸 내림
  • 사용법
    • lag(df$colA) # vector 출력
> df %>%
    mutate(prev_colA = lag(colA))


■ 순위 확인 함수

□ row_number()

> row_number()
  • vector 값들의 순위를 확인함
  • 크기가 무조건 +1 씩


□ min_rank()

> min_rank()
  • vector 값들의 순위를 확인함
  • 같은 값들은 같은 크기로, 그 다음 값들은 밀린 숫자만큼 +됨

□ dense_rank

> dense_rank()
  • vector 값들의 순위를 확인함
  • 같은 값들은 같은 크기로, 그 다음 값은 +1


■ cummean - 누적평균

  • 그룹별로 행을 하나씩 이동해가며 누적평균을 반환
  • group_by를 사용하면 각 그룹은 서로 cummean에 방해받지 않는다.
> df %>% mutate(cum_avg = cummean(avg))
> df %>% group_by(~~) %>% mutate(cum_avg = cummean(avg))


slice()

  • 행을 기준으로 데이터를 출력
> df %>% slice(출력할  번호)

댓글남기기