[R] 조건에 해당하는 값 추출

DongGyu Jung·2021년 9월 27일
0

지난 번에 게시했던 "인덱싱"을 통한 추출과 더불어
조건을 부여해 해당하는 값을 추출하는 함수인
subset()에 알아보도록 하자.


subset() 에서 또한 조건은 지난 번에 알아보았던 인덱싱과 방법이 매우 유사하다.

iris 데이터셋을 다시 사용해보겠다.
이 iris 데이터 셋에서 "인덱싱(Indexing)"을 통해
"Species가 'setosa'인 데이터" 만 추출하고 싶을 때

#조건 대상이 열이름 이기 때문에 행 Index 위치에 작성해야한다.
iris[iris$Species == "setosa",]

위와 같이 작성을 하면 추출할 수 있다.

동일한 데이터를 추출하기 위해 subset()함수를 쓴다면

# subset( [데이터셋], [조건식])
subset(iris, iris$Species == "setosa")

이렇게 사용하면 된다.


잠깐 함수에 대해 짚고 넘어간다면
subset()함수의 사용법은 독특한데
SQL 문법을 알고 있다면 사용하기 수월하다.
"select""where" 을 인수로 쓸 수 있다는 특징이 있다.

  • select 인수의 값으로 "조건을 만족하는 행에서 어떤 열 값만 가져올 것인지 열 이름을 작성한다.
  • where 인수의 값으로 "조건식"을 작성한다.

이 select 와 where을 쓰는 방법은 잠시 후에 알아보자.



우선 조금 더 응용하여 두개 이상의 조건을 부여할 때,
조건을 작성하는 방식 또한 앞서 알아봤던 방법과 동일하다.

"Species가 'setosa'이면서 Sepal.Length가 5 이상인 데이터"
추출하고 싶다면

iris[iris$Sepal.Length > 5 & iris$Species == "setosa"]

subset(iris, iris$Sepal.Length > 5 & iris$Species == "setosa")

   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
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
18          5.1         3.5          1.4         0.3  setosa
19          5.7         3.8          1.7         0.3  setosa
20          5.1         3.8          1.5         0.3  setosa
21          5.4         3.4          1.7         0.2  setosa
...

이렇게 작성할 수 있다.


그리고 만약 Column이 너무나 많은 데이터셋을 다룰 때,
필요한 Column만 지정하여 뽑아 올 수 있다.

"Species가 'setosa'이면서 Sepal.Length가 5 이상인 데이터 행의 [Sepal.Length], [Sepal.Width], [Species] 값" 만 추출하고 싶다면

iris[iris$Sepal.Length > 5 & iris$Species == "setosa",
     c("Sepal.Length", "Sepal.Width", "Species")]
     
#subset의 "select" 인수의 값으로 특정 열 지정하여 추출 ('select =' 생략 가능)
subset(iris, iris$Sepal.Length > 5 & iris$Species == "setosa",
       c("Sepal.Length", "Sepal.Width", "Species"))
       
          Sepal.Length Sepal.Width Species
1           5.1         3.5  setosa
6           5.4         3.9  setosa
11          5.4         3.7  setosa
15          5.8         4.0  setosa
16          5.7         4.4  setosa
17          5.4         3.9  setosa
18          5.1         3.5  setosa
19          5.7         3.8  setosa
...

위 코드와 같이 작성하면 된다.

조건식으로
위와 같은 비교연산자 뿐만 아니라
논리연산자
Bool값을 반환하는 함수를 사용할 수 있다.
(ex. is.null(), is.na(), !is.numeric(), ...)

0개의 댓글