전체서비스
새글보기

따봉브라질

커뮤니티

분류1

컴퓨터

제목

[R] subset 함수로 데이터 추출하기

R 데이터 처리 & 분석

[R] subset 함수로 데이터 추출하기

love R 2020. 1. 18. 05:06

 

subset 함수는 변수 선택 및 조건에 맞는 데이터 추출에 유용합니다.
따라서 데이터전처리시에 필수적으로 알아놓아야 하는 내용이기도 합니다.
subset을 사전에 쳐보면 ’부분집합’이라고 합니다.

 

 subset함수를 사용하면 원래있던 데이터셋에서 ’추출’을 하기 때문에 부분집합이라는 개념이 됩니다.

수학적 정의로 접근하면 더 쉽습니다. “집합 B의 부분집합 A는, 모든 원소가 B에도 속하는 집합이다. 이런 관계를 주로 A ⊆ B라 표기한다. 예를 들어 집합 {1, 2}는 {1, 2, 3}의 부분집합이다.”

 

부분집합의 정의를 subset 함수에 적용하겠습니다.
“원시 데이터(집합B)에서 추출한 데이터(집합A)는 모든 요소가 원시 데이터(집합B)에도 속하는 데이터이다.”
이 개념은 원시 데이터로부터 특정 조건에 맞는 추출한 데이터가 원시 데이터에도 속하는 데이터라는 것입니다.

함수명 앞에 ? 을 쓰면 그 함수의 자세한 설명이 나옵니다.

입력창에 ?subset라고 쓰고 실행시켜봅시다.

 

 


.

위의 내용을 표로 정리하겠습니다.

 

 

 

변수 추출에는 select 인자를 사용합니다. iris 데이터에서 Sepal.Length 와 Petal.Width 변수만 추출합니다.

test1 <- subset(iris,select=c(Sepal.Length,Petal.Width))
head(test1)
  Sepal.Length Petal.Width
1          5.1         0.2
2          4.9         0.2
3          4.7         0.2
4          4.6         0.2
5          5.0         0.2
6          5.4         0.4

 

 

변수를 제외하는 방법은 변수 앞에 - 를 붙여줍니다.

test2 <- subset(iris,select= -Sepal.Length)
head(test2)
  Sepal.Width Petal.Length Petal.Width Species
1         3.5          1.4         0.2  setosa
2         3.0          1.4         0.2  setosa
3         3.2          1.3         0.2  setosa
4         3.1          1.5         0.2  setosa
5         3.6          1.4         0.2  setosa
6         3.9          1.7         0.4  setosa

 

 

특정 조건을 만족하는 데이터를 추출하겠습니다.
이때 subset이라는 인자를 쓰게 될 것인데, 간단한 예를 보겠습니다. Sepal.Length의 값이 5 이상인 데이터를 추출합니다.

test3 <- subset(iris,subset = Sepal.Length >= 5)
head(test3)
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
5           5.0         3.6          1.4         0.2  setosa
6           5.4         3.9          1.7         0.4  setosa
8           5.0         3.4          1.5         0.2  setosa
11          5.4         3.7          1.5         0.2  setosa
15          5.8         4.0          1.2         0.2  setosa

 

헷갈리지 말아야 할 것이 하나 있습니다.

subset(iris,subset = Sepal.Length >= 5)

여기서 앞에 있는 subset 과 뒤에 있는 subset은 의미가 다릅니다.
맨 앞의 subset은 subset 이라는 함수를 쓴다는 뜻입니다.
뒤 쪽의 subset은 subset 함수의 ‘subset’ 이라는 Argument(전달인자)가 있다는 것입니다.

 

 

 

이제 다중 조건식을 걸어서 데이터를 추출하겠습니다.

Sepal.Length의 값이 5 이상이고 Petal.Length의 값이 2 이상인 데이터를 추출합니다.
두 가지 조건이 함께 만족해야 합니다(교집합).
이렇게 같이 동시에 만족해야할 경우 조건식 & 조건식 을 이용합니다.

test3 <- subset(iris,subset = Sepal.Length >= 5 & Petal.Length>=2)
head(test3)
   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

 

 

 

하지만 두 가지 조건중 하나만 만족하는 경우도 있겠죠 Sepal.Length의 값이 5 이상 또는 Petal.Length의 값이 3 이하인 데이터를 추출합니다.
이 때는 조건이 둘 중 하나만 만족하면 되고 조건식 | 조건식 으로 작성해봅시다(합집합).

test4 <- subset(iris,subset = Sepal.Length >= 5| Petal.Length<=3)
head(test4)
  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

 

 

문자로 된 값을 추출할 수도 있습니다. Species 가 ‘versicolor’ 인 데이터를 추출합니다.

test5 <- subset(iris,subset = Species =='versicolor')
head(test5)
   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

 

 

여기서 응용을 해보면
Species 가 ‘versicolor’ 이고 Sepal.Width 가 2이하인 데이터를 추출할 수도 있습니다.

test6 <- subset(iris,subset = Species =='versicolor' & Sepal.Width<=2)
test6
   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
61            5           2          3.5           1 versicolor

위 조건을 만족하는 건 150개의 데이터에서 하나의 케이스가 있네요.

이 외에도 여러 조건으로 바꿔가며 실습해보세요~!
궁금한 점이 있다면 댓글로 달아주시고 공감 꾹 눌러주시면 큰 힘이 됩니다^^

 

 

 

 

 

 

 

 

 

 

 

 

 

 https://jobmanager1.tistory.com/52

 

스팸방지코드 :
번호제목등록자등록일조회수
76컴퓨터 윈도우 7 설치시 파티션 나누기

naver21

2016.03.046,593
75컴퓨터 해외에서 자료 백업

naver21

2016.03.074,110
74컴퓨터 파일질라 다운받기

adidas

2016.05.268,739
73컴퓨터 xml 사이트맵 만들기

adidas

2016.05.264,950
72컴퓨터 QR 코드 리더

naver21

2016.06.263,509
71컴퓨터 LG 'G2' 안드로이드 5.0.1 업데이트하기

pobras

2016.07.073,823
70컴퓨터 워드프레스 블로그에 구글애널리틱스 사용하기

naver21

2016.07.193,334
69컴퓨터 구글 영상 통화 '듀오'와 메신저 '알로'

naver21

2016.08.193,767
68컴퓨터 빠른 인터넷 사용 - 구글 크롬 다운 받기

naver21

2016.09.023,899
67컴퓨터 유투브 비디오 mp3 변환

naver21

2016.10.253,789
1234 5 페이지로 이동