OkBublewrap

데이터 전처리 본문

R/학습용

데이터 전처리

옥뽁뽁 2021. 5. 24. 12:04
ID <- c(1:5)
SEX <- c('F','M','F','M','F')
data1 <- data.frame(ID, SEX)
data1

  ID SEX
1  1   F
2  2   M
3  3   F
4  4   M
5  5   F

 

변수명 변경

data2 <- rename(data1, id = ID, sex = SEX)
data2

  id sex
1  1   F
2  2   M
3  3   F
4  4   M
5  5   F

 

변수명이 소문자로 변경이 되었다는 것을 알수 있다.

 

특정 변수 선택

data2 %>% select(id)

  id
1  1
2  2
3  3
4  4
5  5

 

id인 변수명만 선택

 

data2 %>% filter(sex == 'F')

성별이 여자인 값만 추출

  id sex
1  1   F
2  3   F
3  5   F

 

내림차순으로 정렬하기 

data2 %>% arrange(desc(id))

  id sex
1  5   F
2  4   M
3  3   F
4  2   M
5  1   F

 

# 예제 

class <- c(rep(1, 10))
id <- c(1:10)
math <- c(30,100,95,70,80,85,50,0,60,85)
eng <- c(40,95,90,80,90,90,70,30,80,85)
mid_exam <- data.frame(class, id, math, eng)
mid_exam

id <- c(1,2,3,4,5,6,7,9,10)
math_fin <-c(50,95,80,80,90,70,60,75,90)
eng_fin <- c(50,100,85,80,80,80,80,75,75)
final_exam <- data.frame(id, math_fin, eng_fin)
final_exam

mid_exam 변수명 변경

mid_exam %>% rename(math_mid = math, eng_mid = eng)

mid_exam의 id는 1부터 10까지이지만 final_exam의 id는 8이 빠진것을 알 수 있다.

inner_join 함수를 쓰면 8부분이 제외하고 값을 보여준다.

left_join은 8부분을 결측값으로 설정하고 mid_exam의 변수명 기준으로 보여준다.

full_join은 모든 id를 나타낸다.

bind_rows의 함수는 세로 결합을 한다.

total_exam <- left_join(mid_exam, final_exam)

   class id math eng math_fin eng_fin
1      1  1   30  40       50      50
2      1  2  100  95       95     100
3      1  3   95  90       80      85
4      1  4   70  80       80      80
5      1  5   80  90       90      80
6      1  6   85  90       70      80
7      1  7   50  70       60      80
8      1  8    0  30       NA      NA
9      1  9   60  80       75      75
10     1 10   85  85       90      75

 

total_exam <- inner_join(mid_exam, final_exam)

 class id math eng math_fin eng_fin
1     1  1   30  40       50      50
2     1  2  100  95       95     100
3     1  3   95  90       80      85
4     1  4   70  80       80      80
5     1  5   80  90       90      80
6     1  6   85  90       70      80
7     1  7   50  70       60      80
8     1  9   60  80       75      75
9     1 10   85  85       90      75

 

total_exam$math_avg <- (total_exam$math + total_exam$math_fin)/2
total_exam$eng_avg <- (total_exam$eng + total_exam$eng_fin)/2
total_exam$total_avg <- (total_exam$math_avg + total_exam$eng_avg)/2

math_avg 변수명에 중간 수학 점수, 기말 수학 점수의 평균을 구한 값을 할당

eng_avg 변수명에 중간 영어 점수, 기말 영어 점수의 평균을 구한 값을 할당

total_avg 변수명에 math_avg, eng_avg의 평균값 할당

 

  class id math eng math_fin eng_fin math_avg eng_avg total_avg
1     1  1   30  40       50      50     40.0    45.0     42.50
2     1  2  100  95       95     100     97.5    97.5     97.50
3     1  3   95  90       80      85     87.5    87.5     87.50
4     1  4   70  80       80      80     75.0    80.0     77.50
5     1  5   80  90       90      80     85.0    85.0     85.00
6     1  6   85  90       70      80     77.5    85.0     81.25
7     1  7   50  70       60      80     55.0    75.0     65.00
8     1  9   60  80       75      75     67.5    77.5     72.50
9     1 10   85  85       90      75     87.5    80.0     83.75

 

중간 수학 성적이 80점 이상이고, 영어점수가 90점 이상인 값만 추출

total_exam %>% filter(math >= 80, eng >= 90)

  class id math eng math_fin eng_fin math_avg eng_avg total_avg
1     1  2  100  95       95     100     97.5    97.5     97.50
2     1  3   95  90       80      85     87.5    87.5     87.50
3     1  5   80  90       90      80     85.0    85.0     85.00
4     1  6   85  90       70      80     77.5    85.0     81.25

 

박스그림 시각화

boxplot(total_exam$math_avg, total_exam$eng_avg)

boxplot

'R > 학습용' 카테고리의 다른 글

히트맵  (0) 2021.06.23
reshape2  (0) 2021.05.28
dpylr 패키지  (0) 2021.05.26
ggplot2  (0) 2021.05.25
데이터 분석  (0) 2021.05.21