[R 프로그램] 기초부터 다지기-데이터 전처리(2)_데이터 정렬, 요약, 통합하기
데이터 전처리에 필요한 dplyr 패키지 내장 함수
dplyr 함수 | 기능 |
filter() | 행 추출 |
select() | 열(변수) 추출 |
arrange() | 정렬 |
mutate() | 변수 추가 |
summarise() | 통계치 산출 |
group by() | 집단별로 나누기 |
left_join() | 데이터 합치기(열) |
bind_rows() | 데이터 합치기(행) |
순서대로 정렬하기 (오름차순, 내림차순)
먼저 dplyr 패키지를 불러온 후, exam 데이터를 csv형태로 읽어주었다.
데이터 정렬은 arrange() 를 이용하여 해결할 수 있다.
[오름차순]
exam %>% arrange(math)를 입력해주면, 기존의 id변수 순으로 정렬되어있던 데이터가 수학점수가 낮은 사람에서 높은 사람 순으로 오름차순 정렬되어 출력된다.
[내림차순]
arrange()는 오름차순이 디폴트 값이기 때문에, 내림차순으로 정렬하기 위해서는 arrange에 할당할 기준 변수를 desc()에 적용하면 된다.
위와 같이 exam %>% arrange(desc(math))를 입력한 결과, 이번에는 math가 높은 사람부터 낮은 사람 순으로 출력되었다.
파생변수 추가하기
mutate()를 사용하면 파생변수를 만들어 기존 변수에 추가할 수 있다.
mutate(변수명 = 파생 변수 만들 공식)
수학, 영어, 과학 점수가 합쳐진 total 변수가 새로 생성된 것을 알 수 있다.
여러 파생 변수를 한 번에 추가하기 위해서는
mutate(파생변수1 = 공식, 파생변수2 = 공식) 등으로 나열해주면 된다.
조건문이 추가된 파생변수 추가하기
mutate() 에 ifesle() 를 적용하면 조건에 따라 다른 값을 부여한 변수를 추가할 수 있다.
과학 점수가 60점 이상이면 "pass" 값을, 그렇지 않으면 "fail" 값을 출력하는 코드를 작성하였다.
*dplyr 패키지의 장점은 데이터 프레임명을 반복하여 입력하지 않아도 된다는 점이다.
[dplyr 패키지 사용]
데이터 %>%
mutate(파생변수 = 공식)
vs
[dplyr 패키지 미사용]
데이터$파생변수 <- 데이터$변수 +/-x 데이터$변수...
집단별로 요약하기_summarise(), group_by()
집단별 평균이나 집단별 빈도처럼 각 집단을 요약한 값을 구할 때는 group_by() 와 summarise()를 사용한다.
[summarise]
위 코드는 수학 점수의 평균을 구한 후, mean_math 라는 새 변수에 할당하여 출력값을 나타내는 코드이다.
변수명은 mutate()를 사용할 때와 같이 임의로 정할 수 있다.
[group by]
group_by()에 변수를 지정하면 변수 항목별로 데이터를 분리한다.
여기에 summarise()를 조합하면, 집단별 요약 통계량을 산출할 수 있다.
먼저, class별로 데이터를 분리한 후, 수학점수의 평균을 산출하였다.
*<int>: 정수(integar) / <dbl>: 소수점이 있는 숫자(double, 부동 소수점)
summarise()도 mutate() 처럼 여러 요약통계량을 한번에 산출할 수도 있다. (',' 로 나열하면 된다.)
* n() 는 데이터가 몇 행으로 이루어져 있는지 그 '빈도'를 구하는 기능을 한다. n()은 특정 변수에 적용하는 것이 아니라, 행 개수를 세는 것이기 때문에 다른 함수와 달리 괄호 안에 변수명을 입력하지 않는다.
데이터 합치기
[가로로 합치기-left join]
먼저, 5명의 학생의 중간고사, 기말고사 데이터를 생성해주었다.
left_join() 을 이용하면 데이터를 가로로 합칠 수 있다.
괄호 안에 합칠 데이터 프레임명을 나열하고, 기준으로 삼을 변수명을 by에 지정하면 된다.
이 때, by에 지정되는 변수명에 " " 를 입력해주어야 한다.
left_join()을 응용하면 특정 변수의 값을 기준으로 다른 데이터 값을 추가할 수 있다.
1. 각 반 학생들의 시험 점수를 담은 exam 데이터를 분석하고 있는데, 추가로 반별 담임교사 명단을 얻었다고 가정해보겠다.
2. name은 class와 teacher 두 변수로 구성되어 있다. class 변수를 기준으로 삼아 name의 teaher 변수를 exam에 추가해보겠다.
[세로로 합치기-bind_rows]
먼저, 학생 5명이 먼저 시험을 보고, 나중에 5명이 따로 시험을 봤다고 가정하고 2개의 데이터프레임을 생성했다,
학생 1-5: group_a
학생 6-10: group_b
bind_rows()를 이용하면 데이터를 세로로 합칠 수 있다.
새 변수 <- bind_rows(df1, df2)
* 데이터를 합칠 때에는 두 데이터의 변수명이 같아야 한다. group_a 와 group_b 는 변수명이 id와 test로 동일하기 때문에 세로로 합칠 수 있었지만, 만약 변수명이 다른 데이터프레임을 합치려면 rename()을 이용해 동일하게 변수명을 맞춘 후에 결합해주어야 한다.
※ 위 포스팅은 「Do it! 쉽게 배우는 R 데이터 분석(이지스리퍼블리싱)」 도서를 바탕으로 작성되었습니다.