R) EDA - 명목형 변수의 원소 수 파악

R) EDA - 명목형 변수의 원소 수 파악

현재 다루고 있는 객체의 명목형 변수의 원소를 일괄로 정리하고 싶을 때가 있다. table() 함수를 사용하면 되지만 여러 변수를 한 번에 할때는 어떻게 할까?

단일 변수의 확인

먼저 데이터를 준비한다.

1
2
3
4
5
6
library("ggplot2")
df = as.data.frame(diamonds)
head(df, 2)
## carat cut color clarity depth table price x y z
## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
## 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31

table() 함수와 as.data.frame() 함수를 사용하여 다이아몬드의 색상변수 color 에 속한 고유 원소의 개수를 다음과 같이 확인할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
table(df$color)
## D E F G H I J
## 6775 9797 9542 11292 8304 5422 2808

as.data.frame(table(df$color))
## Var1 Freq
## 1 D 6775
## 2 E 9797
## 3 F 9542
## 4 G 11292
## 5 H 8304
## 6 I 5422
## 7 J 2808

다중 변수의 확인

단일 변수가 아니라 다중 변수를 확인하고자 하는데 문제점이 있다. 다음과 같이 cut 변수의 고유 원소는 5개로 color의 그것과 다르다.

1
2
3
table(df$cut)
## Fair Good Very Good Premium Ideal
## 1610 4906 12082 13791 21551

그래서 이 때 선택할 수 있는 방법이 list 객체의 활용인데 list 객체에 정리할 경우 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
apply(df[, 2:4], MARGIN = 2, FUN = "table")
## $cut
## Fair Good Ideal Premium Very Good
## 1610 4906 21551 13791 12082
##
## $color
## D E F G H I J
## 6775 9797 9542 11292 8304 5422 2808
##
## $clarity
## I1 IF SI1 SI2 VS1 VS2 VVS1 VVS2
## 741 1790 13065 9194 8171 12258 3655 5066

보통 데이터프레임을 활용하기 마련인데 list 객체를 사용할 경우 인덱싱이 불편하다. 그래서 이를 lapply() 함수를 활용하여 정리하는 방법을 소개한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
library("dplyr")
cat_cnt = apply(df[, 2:4], MARGIN = 2, FUN = "table")
cat_cnt = lapply(cat_cnt, FUN = "as.data.frame")
bind_rows(cat_cnt, .id = "colname")
## colname Var1 Freq
## 1 cut Fair 1610
## 2 cut Good 4906
## 3 cut Ideal 21551
## 4 cut Premium 13791
## 5 cut Very Good 12082
## 6 color D 6775
## 7 color E 9797
## 8 color F 9542
## 9 color G 11292
## 10 color H 8304
## 11 color I 5422
## 12 color J 2808
## 13 clarity I1 741
## 14 clarity IF 1790
## 15 clarity SI1 13065
## 16 clarity SI2 9194
## 17 clarity VS1 8171
## 18 clarity VS2 12258
## 19 clarity VVS1 3655
## 20 clarity VVS2 5066

각 list에 같은 형식의 데이터프레임이 있을 경우 row 기준으로 이어붙여주는 bind_rows() 함수를 사용하였다. 이 함수를 위해서 dplyr 패키지를 호출했으며 그 동작은 마치 기본 함수인 rbind() 와 같다고 보면 된다.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×