[R] 데이터 가공하기

·2022년 10월 6일
1

R 프로그래밍

목록 보기
11/12
post-thumbnail

1. 데이터 전처리 - 원하는 형태로 데이터 가공하기

1) 데이터 전처리?

  • 분석에 적합하게 데이터를 가공하는 작업
  • cf. 데이터 가공, 데이터 핸들링, 데이터 랭글릭, 데이터 먼징 등과 같은 용어도 비슷한 의미로 사용.

2) dplyr 패키지로 데이터 가공하기

dplyr 함수기능
filter( )행 추출
select( )열(변수) 추출
arrange( )정렬
mutate( )변수 추가
summarise( )통계치 산출
group_by( )집단별로 나누기
left_join( )데이터 합치기 (열)
bind_rows( )데이터 합치기 (행)



2. 조건에 맞는 데이터만 추출하기

1) dplyr 패키지의 filter( )

  • 데이버를 분석할 때, 원하는 데이터를 추출할 수 있는 함수

2) 조건에 맞는 데이터만 추출하기

  • dplyr 패키지 로드 후 csv_exam.csv 파일을 데이터 프레임으로 만들어 출력
library(dplyr)
exam <- read.csv("csv_exam.csv")
exam
  • dplyr패키지의 filter( )를 이용해 1반 학생들의 데이터만 추출
exam %>% filter(class == 1)
  • 2반 학생들의 데이터만 추출
exam %>% filter(class == 2)
  • 변수가 특정 값이 '아닌' 경우에 해당하는 데이터만 추출하기
    (!= 사용)
exam %>% filter(class != 1) #1반이 아닌 경우
exam %>5% filter(class != 3) #3반이 아닌 경우

3) 초과, 미만, 이상, 이하 조건 걸기

  • 초과인 조건 걸기
exam %>% filter(math > 50)  #수학 점수가 50점을 초과한 경우
  • 미만인 조건 걸기
exam %>% filter(math < 50) #수학 점수가 50점 미만인 경우
  • 이상인 조건 걸기
exam %>% filter(english >= 80) #영어 점수가 80점 이상인 경우
  • 이하인 조건 걸기
exam %>% filter(english <= 80) #영어 점수가 80점 이하인 경우
  • 사용 연산자
기호설명
- 데이터 전달하기
파이프 연산자(%>%)- dplyr 패키지를 로딩하면 사용할 수 있음
- 파이프 연산자(%>%)는 체인 연산자(chain operator), 파이프라고도 함.
- 앞서 연산된 결과값 또는 데이터를 다음으로 전달하는 역할을 함.
==- 서로 같다는 의미
!=- 같지 않다는 의미
>- ~보다 크다는 의미
<- ~보다 작다는 의미
>=- ~보다 크거나 같다
<=~보다 작거나 같다

4) 여러 조건을 충족하는 행 추출하기

  • 기호 & 사용
<입력>
#1반이면서 수학점수가 50점 이상인 경우
exam %>% filter(class == 1 & math >= 50)

<출력>
##   id  class  math  english  science
## 1  1     1     50       98       50
## 2  2     1     60       97       60


<입력>
#2반이면서  영어 점수가 80점 이상인 경우
exam %>% filter(class == 2 & english >= 80)

<출력>
##   id  class  math  english  science
## 1  5      2    25       80       65
## 2  6      2    50       89       98
## 3  7      2    80       90       45

5) 여러 조건 중 하나 이상 충족하는 행 추출하기

  • | 기호 사용 ( | 기호는 '또는'을 의미)
<입력>
#수학 점수가 90점 이상이거나 영어 점수가 90점 이상인 경우
exam %>% filter(math >= 90 | english >= 90)

<출력>
##   id  class  math  english  science
## 1  1     1     50      98        50 
## 2  2     1     60      97        60 
## 3  4     1     30      98        58
## 4  7     2     80      90        45
## 5  8     2     90      78        25
## 6  9     3     20      98        15
<입력>
#영어 점수가 90점 미만이거나 과학 점수가 50점 미만인 경우
exam %>% filter(english < 90 | science < 50)

<출력>
##   id  class  math  english  science
## 1  3     1     45      86        78 
## 2  5     2     25      80        65 
## 3  6     2     50      89        98
## 4  7     2     80      90        45
## 5  8     2     90      78        25
## 6  9     3     20      98        15

6) 목록에 해당하는 행 추출하기

  • 변수의 값이 지정한 목록에 해당될 경우만 추출해야할 경우 ' | ' 기호를 이용해 여러 조건을 나열
<입력>
#1, 3, 5반에 해당하면 추출

<출력>
##   id  class  math  english  science
## 1  1     1     50      98        50 
## 2  2     1     60      97        60 
## 3  3     1     45      86        78
## 4  4     1     30      98        58
## 5  9     3     20      98        15
## 6  10    3     50      98        45
  • %in% 기호와 c( )함수를 이용해 조건목록에 입력하면 변수의 값이 지정한 조건 목록에 해당하는지 확인할 수 있음.
    (%in% : 매치연산자)
<입력>
exam %>% filter(class %in% c(1, 3, 5)) #1, 3, 5반에 해당하면 추출

<출력>
##   id  class  math  english  science
## 1  1     1     50      98        50 
## 2  2     1     60      97        60 
## 3  3     1     45      86        78
## 4  4     1     30      98        58
## 5  9     3     20      98        15
## 6  10    3     50      98        45

7) 추출한 행으로 데이터 만들기

class1 <- exam %>% filter(class == 1) #class가 1인 행 추출, class1에 할당
class2 <- exam %>% filter(class == 2) #class가 2인 행 추출, class2에 할당

mean(class1$math) #1반 수학 점수 평균 구하기
## [1] 46.25

mean(class2$math) #2반 수학 점수 평균 구하기
## [1] 61.25



3. 필요한 변수만 추출하기

  • select( )함수 : 데이터에 들어 있는 수많은 변수 중 일부 변수만 추출해 활용하고자 할 때 사용

1) 변수 추출하기

  • %>% 로 select( ) 연결 : 원하는 변수만 추출해 출력하는 기능
<입력>
#exam에서 math 변수만 추출해 출력
exam %>% select (math)

<출력>
##	  math
## 1   50				
## 2   60        		
## 3   45			
## 4   30			
......

2) 여러 변수 추출하기

  • 쉼표를 넣어 변수명을 나열하면 여러 변수를 동시에 추출할 수 있다.
<입력>
#exam에서 class, math, english 변수 추출
exam %>% select (class, math, english)

<출력>
##	  class		math	english	 
## 1   1		  50			98		
## 2   1	 	  60			97	    
## 3   1		  45			86			
## 4   1		  30			98		
......

3) 변수 제외하기

  • 특정 변수만 제외하고 나머지 모든 변수를 추출하는 방법
  • 제외할 변수명 앞에 빼기 기호 (-) 입력
  • 여러 변수 제외하려면 쉼표 사용
#exam에서 math 변수만 추출해 출력
exam %>% select (math)

<출력>
##	  id	class	english	 science
## 1   1		1		98		50	
## 2   2        1		97	    60
## 3   3		1		86		78	
## 4   4		1		98		58
......

4) dplyr 함수 조합하기

  • filter( )와 select( ) 조합하기
<입력>
# class가 1인 행만 추출한 다음 english 추출
exam %>% filter(class == 1) %>% select(english)

<출력>
##   english
## 1	98
## 2	97
## 3	86
## 4	98
  • 가독성 있기 줄 바꾸기
    • %>%로 코드가 연결되는 부분에서 줄을 바꾸면 함수별로 구분되기 때문에 가독성 있는 코드를 만들 수 있음
    • %>% 뒤에서 Enter키로 줄을 바꾸면 자동으로 일정 간격이 띄어져 어디까지 dplyr코드 단락인지 파악 가능
    • 실행할 때는 dplyr구문 전체를 함께 실행해야 함.
      exam %>%
      filter(class == 1) %>%  #class가 1인 행 추출
      select(english) 	#english 추출
  • 일부만 출력하기
    • 데이터의 일부를 출력할 때 사용하는 head( )를 dplyr에 조합해 사용
    • dplyr 구문의 마지막에 %>%로 연결해 head를 입력
    • 괄호 없이 head만 쓰면 6행까지 출력, 괄호 안에 숫자 입력하면 입력한 숫자만큼 행 추출
    • dplyr 적용한 결과 중 일부만 확인하고자 할 때 사용
      <입력>
      exam %>%
      	select(id, math) %>%  #id, math 추출
          head				  #앞부분 6행까지 추출
      <출력>
      ##	  id	  math
      ## 1 	1  		50				
      ## 2   	2		60        		
      ## 3   	3		45			
      ## 4   	4		30	 
      ## 5 	5		25
      ## 6	6		50
      
      



4. 순서대로 정렬하기

1) 오름차순으로 정렬하기

  • arrange( )에 정렬을 원하는 변수명을 입력하면 오름차순으로 정렬해 출력
<입력>
exam %>% arrange(math)  #math오름차순 정렬

<출력>
##  	id	  class	  math   english   science
## 1	 9		 3		20		 98			15
## 2	 5		 2		25		 80			65
## 3	 4		 1		30		 98			58
## 4  	 3		 1		45		 86			78
## 5	12		 3		45		 85			32
## 6	13		 4		46		 98			65
...

2) 내림차순으로 정렬하기

  • desc( )에 정렬을 원하는 변수를 입력하면 높은 값에서 낮은 값 순으로 내림차순 정렬
<입력>
exma %>% arrange(desc(math)) #math 내립차순 정렬

<출력>
## 		id	  class	   math    english    science
## 1	4		1		30			98		  58
## 2	3		1		45			86		  78
## 3	1		1		50			98		  50	
## 4	2		1		60			97		  60
## 5	5		2		25			80		  65
## 6	6		2		50			89		  98
## 7	7		2		80			90		  45
## 8	8		2		90			78		  25



5. 파생변수 추가하기

profile
열심히 하는 나를 위한 기록

0개의 댓글