SW/R

R : 분리(split), 선택(subset)-전처리 (개념 및 예제)

얇은생각 2019. 2. 27. 12:30
반응형

분리(split) & ,선택(subset)


분리(split)

데이터셋을 주어진 기준에 따라 여러개로 분리합니다. 열 종류별로 기준을 잡고 분리하는 예제입니다.


sp <- split(iris, iris$Species)
sp # list
# $setosa
# 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
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# $versicolor
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 51 7.0 3.2 4.7 1.4 versicolor
# 52 6.4 3.2 4.5 1.5 versicolor
# 53 6.9 3.1 4.9 1.5 versicolor
# 54 5.5 2.3 4.0 1.3 versicolor
# 55 6.5 2.8 4.6 1.5 versicolor
# 56 5.7 2.8 4.5 1.3 versicolor
# $virginica
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 101 6.3 3.3 6.0 2.5 virginica
# 102 5.8 2.7 5.1 1.9 virginica
# 103 7.1 3.0 5.9 2.1 virginica
# 104 6.3 2.9 5.6 1.8 virginica
# 105 6.5 3.0 5.8 2.2 virginica



보시다 시피 분리한 데이터는 리스트 형식으로 표현됩니다.  그리고 분리된 데이터에 접근을 하기 위해서는 다음과 같이 표현합니다.

summary(sp)
# Length Class Mode
# setosa 5 data.frame list
# versicolor 5 data.frame list
# virginica 5 data.frame list
class(sp)
# [1] "list"
sp$setosa
# 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
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5.4 3.9 1.7 0.4 setosa

subset(iris, Species == "setosa")
# 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
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa



선택(subset)

이전에는 열에 따라 추출을 하였습니다. 하지만 subset을 활용하면 조건에 맞는 행(row)들을 추출할 수 있습니다.


subset(iris, Sepal.Length > 5.1)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 6 5.4 3.9 1.7 0.4 setosa
# 11 5.4 3.7 1.5 0.2 setosa
# 15 5.8 4.0 1.2 0.2 setosa
# 16 5.7 4.4 1.5 0.4 setosa
# 17 5.4 3.9 1.3 0.4 setosa
# 19 5.7 3.8 1.7 0.3 setosa
# 21 5.4 3.4 1.7 0.2 setosa


subset(iris, Sepal.Length > 5.1 &
Sepal.Width > 3.9)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 15 5.8 4.0 1.2 0.2 setosa
# 16 5.7 4.4 1.5 0.4 setosa
# 33 5.2 4.1 1.5 0.1 setosa
# 34 5.5 4.2 1.4 0.2 setosa
subset(iris, Sepal.Length > 5.1,
select=c(Petal.Length,Petal.Width))
# Petal.Length Petal.Width
# 6 1.7 0.4
# 11 1.5 0.2
# 15 1.2 0.2
# 16 1.5 0.4
# 17 1.3 0.4
# 19 1.7 0.3



조건에 맞는 값들의 인덱스 알아 낼 수 있습니다. which 함수를 활용하면 됩니다. 아래 예제를 참고하세요.


x <- c(3,1,7,8,5,9,4)
which(x>5)
# [1] 3 4 6
which(iris$Species=="setosa")
# [1] 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 26 27 28
# [29] 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
which.max(iris$Sepal.Length)
# [1] 132
which.min(iris$Sepal.Width)
# [1] 61


반응형