JJUNNAK's

[ R ] 데이터셋 Dataset, 데이터 조작 함수 모음 본문

Language/R

[ R ] 데이터셋 Dataset, 데이터 조작 함수 모음

최낙준 2023. 1. 17. 02:58

데이터셋

Dataset

데이터셋이란?

분석을 위하여 2차원의 형태로 모아놓은 자료를 말한다.

R에서는 기본적으로 제공해주는 데이터셋들이 있으며

각 패키지에서 제공해주는 데이터셋들도 있다.


데이터셋 정보 확인

[ Iris(붓꽃) 데이터셋 ]

iris 데이터셋은 R에 기본적으로 내장되어있는 데이터셋으로

붓꽃의 3가지 종(setosa, versicolor, virginica)에 대해

꽃받침sepal과 꽃잎petal의 길이를 정리한 데이터이다.

  1. 데이터셋 불러오기.
iris   # iris 데이터셋 불러옴

> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
.
.
.
.
149          6.2         3.4          5.4         2.3  virginica
150          5.9         3.0          5.1         1.8  virginica
 

2. 데이터셋 정보확인 함수

 
class(iris)     # 데이터셋 자료구조 확인
> "data.frame"
dim(iris)       # 행과 열의 개수 표시
> 150   5
nrow(iris)      # 행의 개수 표시
> 150
ncol(iris)      # 열의 개수 표시
> 5
colnames(iris)  # 열 이름 표시 == names() 함수와 결과 동일
> "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species" 
head(iris)      # 데이터셋 앞부분 일부 표시
tail(iris)      # 데이터셋 뒷부분 일부 표시
str(iris)                 # 데이터셋 요약정보 표시
> 'data.frame':	150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

levels(iris[,5])          # 품종의 종류 표시 (중복제거)
> "setosa"   "versicolor"  "virginica" 

table(iris[,"Species"])   # 품종의 종류별 행 개수 표시
>  setosa versicolor  virginica 
        50         50         50

위의 str() 함수는 데이터셋의 전반적인 정보를 알아낼 수 있는 함수이다.

실행 결과에서 'data.frame': 150 obs. of 5 variables: 는 

데이터프레임 자료구조에 150개의 관측값(observations) , 5개의 변수(열)에 존재하고 있음을 나타낸다.

levels() 함수는 어떤 그룹을 나타내는 팩터 자료에 중복값을 제거하고 값의종류를 바로 알 수 있는 함수이다

table() 함수는 각 그룹별로 몇개의 관측값(행) 이 존재하는지 알려주는 함수이다.

그룹별로 몇개의 값이 있는지 정리한 것을 "도수 분포표" 라고 한다.


데이터 연산,조작 함수

R에서는 저장된 데이터를 자유자재로 다룰 수 있는 다양한 함수를 제공한다.

아래 예시는 계속해서 iris 데이터셋을 사용한다.

  1. 행,열별 합계,평균 계산
* iris 5열의 품종 데이터는 팩터 형태이기때문에 산술연산이 적용되지 않아 제외함.

colSums(iris[,-5])   # 열별 합계
> Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
       876.5        458.6        563.7        179.9 
colMeans(iris[,-5])  # 열별 평균

rowSums(iris[,-5])   # 행별 합계
rowMeans(iris[,-5])  # 행별 평균
>   [1] 2.550 2.375 2.350 2.350 2.550 2.850 2.425 2.525 2.225 2.400 2.700 2.500
 [13] 2.325 2.125 2.800 3.000 2.750 2.575 2.875 2.675 2.675 2.675 2.350 2.650
 [25] 2.575 2.450 2.600 2.600 2.550 2.425 2.425 2.675 2.725 2.825 2.425 2.400
 [37] 2.625 2.500 2.225 2.550 2.525 2.100 2.275 2.675 2.800 2.375 2.675 2.350
 [49] 2.675 2.475 4.075 3.900 4.100 3.275 3.850 3.575 3.975 2.900 3.850 3.300
 [61] 2.875 3.650 3.300 3.775 3.350 3.900 3.650 3.400 3.600 3.275 3.925 3.550
 [73] 3.800 3.700 3.725 3.850 3.950 4.100 3.725 3.200 3.200 3.150 3.400 3.850
 [85] 3.600 3.875 4.000 3.575 3.500 3.325 3.425 3.775 3.400 2.900 3.450 3.525
 [97] 3.525 3.675 2.925 3.475 4.525 3.875 4.525 4.150 4.375 4.825 3.400 4.575
[109] 4.200 4.850 4.200 4.075 4.350 3.800 4.025 4.300 4.200 5.100 4.875 3.675
[121] 4.525 3.825 4.800 3.925 4.450 4.550 3.900 3.950 4.225 4.400 4.550 5.025
[133] 4.250 3.925 3.925 4.775 4.425 4.200 3.900 4.375 4.450 4.350 3.875 4.550
[145] 4.550 4.300 3.925 4.175 4.325 3.950

2. 행과 열의 방향 전환

z <- matrix(1:20, nrow=4,ncol=5)
>      [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20


t(z)
>      [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12
[4,]   13   14   15   16
[5,]   17   18   19   20

t() 함수는 행과 열의 방향을 transpose(변환) 해주는 함수이다.

3. 조건 검색

# 품종 열이 setosa인 행만 추출
IR.1 <- subset(iris, Species=='setosa') 

# Sepal.Length 의 값이 5.0보다 크고 Sepal.width값이 4.0보다 큰 행만 추출
IR.2 <- subset(iris, Sepal.Length>5.0 & Sepal.Width>4.0)
)

subset() 함수는 subset(대상데이터, 조건) 의 형식으로 사용된다.

데이터프레임에서는 잘 작동되지만 매트릭스에서는 잘 작동되지 않으므로 

데이터프레임으로 변환한후 사용해야한다.

4. 산술연산 적용

숫자로 구성된 매트릭스나 데이터 프레임에 대해서도 산술연산을 적용할 수 있다.

a <- matrix(1:6, 3, 2)
>      [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
b <- matrix(5:10, 3, 2)
>      [,1] [,2]
[1,]    5    8
[2,]    6    9
[3,]    7   10

2*a
>      [,1] [,2]
[1,]    2    8
[2,]    4   10
[3,]    6   12

a+b
>      [,1] [,2]
[1,]    6   12
[2,]    8   14
[3,]   10   16

매트릭스에 대한 산술연산은 안에 저장된 값들에 대한 연산으로 바뀌어 실행된다.

매트릭스 a,b를 더하는 연산은 동일한 위치에 있는 값들 간에 더하는 연산으로 바뀌어 실행된다.

매트릭스 간의 연산에서는 동일한 크기(행,열 개수) 를 가져야한다.

5. 자료구조 변환

매트릭스로, 데이터프레임으로 자료구조를 변환할 수 있다.

 
m <- as.matrix(iris[,1:4]) # 데이터프레임을 매트릭스로 변환

df <- as.data.frame(m)     # 매트릭스를 데이터프레임으로 변환

데이터 프레임 매트릭스로 변환할 때에는 매트릭스에 저장될 모든 값들의 자료형은 동일해야한다.


데이터 프레임에만 적용되는 열 추출

위에서 서술된 함수들은 매트릭스,데이터프레임 모두 동일하게 적용이 되는 함수들이다.

하지만

매트릭스에서는 안되고 데이터프레임에서만 적용되는 방법이 있다.

  1. 특정 열에 저장된 데이터 추출 * 데이터프레임만 가능
# iris데이터셋 품종 데이터 추출
iris["Species"]  
iris[5]

기존의 2차원구조의 데이터 추출에는 인덱스 2개가 필요하다 [ 행, 열 ]

하지만 데이터 프레임에서는 하나의 인덱스만 가지고 데이터를 추출할 수 있는데

하나의 인덱스는 '열'을 의미한다.

이런 방식으로 열을 추출하면 결과가 벡터가 아닌 데이터프레임 형태로 추출된다.

# 실행결과
> iris["Species"]
       Species
1       setosa
2       setosa
3       setosa
4       setosa
5       setosa
.
.
.

2. $ 사용

또한 데이터셋 이름 다음에 $열이름 을 붙여서 추출할 수도 있다.

iris$Species

이도 마찬가지로 데이터 프레임에만 적용되며 결과는 벡터형식으로 추출된다.

iris[,"Species"] 와 같은 결과를 도출한다.

# 실행결과

> iris$Species
 [1] setosa     setosa     setosa     setosa     setosa     setosa    
  [7] setosa     setosa     setosa     setosa     setosa     setosa    
 [13] setosa     setosa     setosa     setosa     setosa     setosa    
 [19] setosa     setosa     setosa     setosa     setosa     setosa  
.
.
.

 

'Language > R' 카테고리의 다른 글

[ R ] 막대 그래프 barplot() , par()함수  (0) 2023.01.17
[ R ] .csv .xlsx 파일 저장, 불러오기  (0) 2023.01.17
[ R ] 데이터 프레임 DataFrame  (0) 2023.01.17
[ R ] 매트릭스 Matrix  (0) 2023.01.17
[ R ] 리스트 List  (0) 2023.01.17
Comments