[R] 데이터 구조

DongGyu Jung·2021년 9월 13일
0

데이터 정제에 앞서
함수 사용이나 데이터 취급을 위해서는
데이터의 전체적인 구조나 정보에 대해 알고있어야 한다.


데이터 정보 조회

자료 구조형

#자료구조형 조회
a <- c("a","b","c")

class() 
class(iris)
> class(iris)
[1] "data.frame"

class(iris$Species)
> class(iris$Species)
[1] "factor"

class(iris$Sepal.Length)
> class(iris$Sepal.Length)
[1] "numeric"

class(a)
> class(a)
[1] "character"
  • factor성별 이나 등급 등과 같이 데이터가 속해있는 그룹/범주 등을 나타내는 값
levels(iris$Species)
> levels(iris$Species)
[1] "setosa"     "versicolor" "virginica" 

요약

  • 해당 데이터의 간략한 정보 조회
# Data Frame 일 경우, Column별로 요약
# numeric 데이터 : 최소/최대/1사분위/중앙값/평균/3사분위 값
# factor 데이터 : 빈도수(Freq)
# character 데이터 : 길이(Length), 클래스(Class), 모드(Mode)

data <- c("월","수","토","월", "수", "화", "수", "수", "목", "화")

summary(data)
> summary(data)
   Length     Class      Mode 
       10 character character 

summary(iris)
> summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width          Species  
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100   setosa    :50  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300   versicolor:50  
 Median :5.800   Median :3.000   Median :4.350   Median :1.300   virginica :50  
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199                  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800                  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500 

# 데이터 자료 형태 정보
dim() # (행 수 , 열 수)
dim(iris)
> dim(iris)
[1] 150   5

#열 수
ncol()
ncol(iris)
> ncol(iris)
[1] 5

#행 수
nrow()
nrow(iris)
> nrow(iris)
[1] 150

범주화

  • 일정한 기준으로 데이터를 Grouping 을 하면
    Factor로 구분할 수 있다.
data <- c("월","수","토","월", "수", "화", "수", "수", "목", "화")

summary(data)
> summary(data)
   Length     Class      Mode 
       10 character character 
       
# factor() 함수를 통해 Grouping
fdata <- factor(data)
> fdata
 [1] 월 수 토 월 수 화 수 수 목 화
Levels: 목 수 월 토 화

class(fdata)
summary(fdata)
levels(fdata)

# 구조가 변환된 것을 알 수 있다.
> class(day1)
[1] "factor"

> summary(day1)
목 수 월 토 화 
 1  4  2  1  2 
 
> levels(day1)
[1] "목" "수" "월" "토" "화"

  • 상황에 따라 내 마음대로 변환시킬 수 있다.
    levels를 직접 지정하고 이름(labels) 또한 지정 할 수 있다.
week.name <- c("일", "월", "화","수", "목", "금", "토")

fdata2 <- factor(data,
		 levels = week.name)

# levels에 해당하는 값이 없더라도 미리 범주를 만들어 놓을 수 있다.
fdata2
> fdata2
 [1] 월 수 토 월 수 화 수 수 목 화
Levels: 일 월 화 수 목 금 토

summary(fdata2)
levels(fdata2)

#출력 순서도 위 week.name 벡터의 순서대로 지정된 것을 알 수 있다.
#"일"과 "금"이라는 levels에 해당하는 값은 없기때문에 빈도수는 0이다.
> summary(fdata2)
일 월 화 수 목 금 토 
 0  2  2  4  1  0  1 

> levels(fdata2)
[1] "일" "월" "화" "수" "목" "금" "토"

# 반대로 값은 있지만 해당하는 levels가 없는 경우
b.type <- factor(c("A", "O", "AB", "B", "O", "A", "O"), 
  		 levels=c("A", "B", "O"))

# levels에 없는 값은 <NA>로 표시되는 것을 볼 수 있다.
b.type
> b.type
[1] A    O    <NA> B    O    A    O   
Levels: A B O

기존에 지정된 levelsFactor명을 바꾸는 방법은 labels인수로 지정해주는 것이다.

#labels로 지정해주는 값의 갯수와 위치는 levels와 통일시켜야한다.
gender <- factor(c(1,2,1,1,1,2,1,2), 
                 levels=c(1,2), 
                 labels=c("남성", "여성"))

> gender
[1] 남성 여성 남성 남성 남성 여성 남성 여성
Levels: 남성 여성

> summary(gender)
남성 여성 
   5    3 

> levels(gender)
[1] "남성" "여성"

0개의 댓글