본문 바로가기
R특강/하루만에 끝내는 R 데이터프레임

[하루만에 끝내는 R 데이터프레임] 8. 특정 조건으로 데이터프레임 추출하기

by 만다린망고 2023. 7. 12.
반응형

이번 시간에는 특정 조건으로 데이터프레임을 추출하는 방법을 알아보겠습니다. 

1교시. 강의 소개
2교시. 데이터프레임 정의하고 행이름, 열이름 바꾸기
3교시. 유용한 기본함수 (tail, head, str, dim)
4교시. 벡터의 인덱싱
5교시. 데이터 프레임 원소에 접근하기 (데이터프레임 인덱싱)
6교시. 데이터프레임 행과 열에 접근하기 (데이터프레임 열/행 인덱싱)
7교시. 데이터프레임 행 또는 열 제거, 추가, 변경하기
8교시. 특정 조건으로 데이터프레임 추출하기
9교시. 여러 데이터프레임 결합하기
10교시. 엑셀파일을 데이터프레임으로 불러오기

이번시간에 사용할 데이터는 CO2라는 내장데이터입니다. 먼저 내장데이터 CO2를 변수 dt에 넣어줍니다. 

 

dt=CO2

 

str 함수를 이용하여 CO2 데이터에 어떤 변수들이 있는지 살펴봅시다. 

> str(CO2)
Classes ‘nfnGroupedData’, ‘nfGroupedData’, ‘groupedData’ and 'data.frame': 84 obs. of  5 variables:
 $ Plant    : Ord.factor w/ 12 levels "Qn1"<"Qn2"<"Qn3"<..: 1 1 1 1 1 1 1 2 2 2 ...
 $ Type     : Factor w/ 2 levels "Quebec","Mississippi": 1 1 1 1 1 1 1 1 1 1 ...
 $ Treatment: Factor w/ 2 levels "nonchilled","chilled": 1 1 1 1 1 1 1 1 1 1 ...
 $ conc     : num  95 175 250 350 500 675 1000 95 175 250 ...
 $ uptake   : num  16 30.4 34.8 37.2 35.3 39.2 39.7 13.6 27.3 37.1 ...
 - attr(*, "formula")=Class 'formula'  language uptake ~ conc | Plant
  .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv> 
 - attr(*, "outer")=Class 'formula'  language ~Treatment * Type
  .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv> 
 - attr(*, "labels")=List of 2
  ..$ x: chr "Ambient carbon dioxide concentration"
  ..$ y: chr "CO2 uptake rate"
 - attr(*, "units")=List of 2
  ..$ x: chr "(uL/L)"
  ..$ y: chr "(umol/m^2 s)"


CO2 데이터에는 Plant, Type, Treatment, conc, uptake 라는 다섯개의 변수가 있습니다. 자세한 설명은 콘솔창에 ?CO2라고 입력하면 도움말이 나옵니다. 

CO2 데이터를 간단히 설명하겠습니다. 총 12종의 식물의 이산화탄소 흡수율을 측정한 것입니다. Plant 열은 12종의 식물을 나타내구요. Type 열은 식물을 가져온 지역을 나타냅니다. Treatment 는 냉각 여부를 나타냅니다. conc 는 주변 이산화탄소 농도입니다. uptake 는 이산화탄소 흡수율입니다. 

지역, 냉각 처리 여부, 주변 이산화탄소 농도를 달리하여 식물의 이산화탄소 흡수율이 어떻게 달라지는지를 알아본 데이터입니다. 

데이터는 이정도만 이해하고 있어도 됩니다. 아래 몇가지 예제에 답해보면서 특정 조건으로 데이터프레임을 추출하는 방법을 알아봅시다. 

 

1) Type이 Quebec 인 데이터 추출하기
2) Type이 Quebec 이고, Treatment가 chilled 인 데이터 추출하기
3) Type이 Quebec 인 Treatment 데이터 추출하기
4) Type이 Quebec 이고 uptake 가 40 이상인 데이터 추출하기

 

1) Type이 Quebec 인 데이터 추출하기

전체 데이터에서 Type이 Quebec 인 데이터만 추출하는 방법은 아래와 같습니다. 

dt[ dt['Type']=='Quebec' , ]


원리를 이해하는 것이 중요합니다. 몇가지 원리만 이해하면 데이터를 원하는대로 추출하는 것이 어렵지 않을 겁니다. 

dt[행,열] 의 행 자리에 dt['Type']=='Quebec' 가 입력되어 있습니다. dt['Type']=='Quebec' 는 Type이 Quebec인 경우 TRUE 를 반환하고, 아닐 경우 FALSE를 반환합니다. 아래와 같습니다. 

> dt['Type']=='Quebec'
    Type
1   TRUE
2   TRUE
3   TRUE
4   TRUE
5   TRUE
6   TRUE
7   TRUE
...


위 결과가 dt[행,열] 의 행의 자리에 들어가 있습니다. Type 이 Quebec 인 행은 남기고, Quebec이 아닌 행은 없애겠다는 의미입니다. 결과를 출력해보면 아래와 같습니다. 

> dt[ dt['Type']=='Quebec' , ]
   Plant   Type  Treatment conc uptake
1    Qn1 Quebec nonchilled   95   16.0
2    Qn1 Quebec nonchilled  175   30.4
3    Qn1 Quebec nonchilled  250   34.8
4    Qn1 Quebec nonchilled  350   37.2
5    Qn1 Quebec nonchilled  500   35.3
6    Qn1 Quebec nonchilled  675   39.2
7    Qn1 Quebec nonchilled 1000   39.7
8    Qn2 Quebec nonchilled   95   13.6
9    Qn2 Quebec nonchilled  175   27.3
10   Qn2 Quebec nonchilled  250   37.1
11   Qn2 Quebec nonchilled  350   41.8
12   Qn2 Quebec nonchilled  500   40.6
13   Qn2 Quebec nonchilled  675   41.4
14   Qn2 Quebec nonchilled 1000   44.3
15   Qn3 Quebec nonchilled   95   16.2
16   Qn3 Quebec nonchilled  175   32.4
17   Qn3 Quebec nonchilled  250   40.3
18   Qn3 Quebec nonchilled  350   42.1
19   Qn3 Quebec nonchilled  500   42.9
20   Qn3 Quebec nonchilled  675   43.9
21   Qn3 Quebec nonchilled 1000   45.5
22   Qc1 Quebec    chilled   95   14.2
23   Qc1 Quebec    chilled  175   24.1
24   Qc1 Quebec    chilled  250   30.3
25   Qc1 Quebec    chilled  350   34.6
26   Qc1 Quebec    chilled  500   32.5
27   Qc1 Quebec    chilled  675   35.4
28   Qc1 Quebec    chilled 1000   38.7
29   Qc2 Quebec    chilled   95    9.3
30   Qc2 Quebec    chilled  175   27.3
31   Qc2 Quebec    chilled  250   35.0
32   Qc2 Quebec    chilled  350   38.8
33   Qc2 Quebec    chilled  500   38.6
34   Qc2 Quebec    chilled  675   37.5
35   Qc2 Quebec    chilled 1000   42.4
36   Qc3 Quebec    chilled   95   15.1
37   Qc3 Quebec    chilled  175   21.0
38   Qc3 Quebec    chilled  250   38.1
39   Qc3 Quebec    chilled  350   34.0
40   Qc3 Quebec    chilled  500   38.9
41   Qc3 Quebec    chilled  675   39.6
42   Qc3 Quebec    chilled 1000   41.4


2) Type이 Quebec 이고, Treatment가 chilled 인 데이터 추출하기

Type이 Quebec인 데이터를 추출하는 코드는 아래와 같습니다.

dt[ dt['Type']=='Quebec' , ]


Treatment 가 chilled 인 데이터를 추출하는 코드는 아래와 같습니다. 

dt[ dt['Treatment']=='chilled' , ]


두 데이터의 교집합을 추출해야 하는데요. 논리연산자 &를 사용하면 됩니다. 

dt[ dt['Type']=='Quebec' & dt['Treatment']=='chilled' , ]

 

 

3) Type이 Quebec 인 Treatment 데이터 추출하기

Type이 Quebec인 데이터를 추출하는 방법은 아래와 같습니다. 

dt[ dt['Type']=='Quebec' , ]


이렇게 추출된 데이터에서 Treatment 열만 다시 추리면 되는데요. 위 코드의 '열' 자리에 Treatment 를 입력하면 됩니다. 

dt[ dt['Type']=='Quebec' , 'Treatment']

> dt[ dt['Type']=='Quebec' , 'Treatment']
 [1] nonchilled nonchilled nonchilled nonchilled nonchilled nonchilled
 [7] nonchilled nonchilled nonchilled nonchilled nonchilled nonchilled
[13] nonchilled nonchilled nonchilled nonchilled nonchilled nonchilled
[19] nonchilled nonchilled nonchilled chilled    chilled    chilled   
[25] chilled    chilled    chilled    chilled    chilled    chilled   
[31] chilled    chilled    chilled    chilled    chilled    chilled   
[37] chilled    chilled    chilled    chilled    chilled    chilled   
Levels: nonchilled chilled

 

4) Type이 Quebec 이고 uptake 가 40 이상인 데이터 추출하기

마지막 내용입니다. Type이 Quebec인 데이터를 추출하는 코드는 아래와 같습니다.

dt[ dt['Type']=='Quebec' , ]


uptake 가 40 이상인 데이터를 추출하는 코드는 아래와 같습니다. 비교 연산자를 사용합니다. 

dt[ dt['uptake']>=40 , ]


두 데이터의 교집합을 추출하면 됩니다. 논리연산자 &를 사용하면 됩니다. 

dt[ dt['Type']=='Quebec' & dt['uptake']>=40 , ]

 

> dt[ dt['Type']=='Quebec' & dt['uptake']>=40 , ]
   Plant   Type  Treatment conc uptake
11   Qn2 Quebec nonchilled  350   41.8
12   Qn2 Quebec nonchilled  500   40.6
13   Qn2 Quebec nonchilled  675   41.4
14   Qn2 Quebec nonchilled 1000   44.3
17   Qn3 Quebec nonchilled  250   40.3
18   Qn3 Quebec nonchilled  350   42.1
19   Qn3 Quebec nonchilled  500   42.9
20   Qn3 Quebec nonchilled  675   43.9
21   Qn3 Quebec nonchilled 1000   45.5
35   Qc2 Quebec    chilled 1000   42.4
42   Qc3 Quebec    chilled 1000   41.4

 

반응형

댓글