R에서 여러 조건으로 데이터 프레임 필터링

Jesse John 2023년6월21일
  1. R에서 여러 조건으로 데이터 프레임 필터링
  2. 부울 연산자 사용
  3. 표현 평가의 우선 순위
  4. 괄호를 사용하여 원하는 조합 지정
  5. %in% 연산자 사용
  6. 참조
R에서 여러 조건으로 데이터 프레임 필터링

데이터 프레임의 행 필터링은 데이터 분석의 일반적인 단계입니다. 대부분의 경우 결과의 행을 둘 이상의 조건을 충족하는 행으로 제한해야 합니다.

이러한 여러 조건이 관련된 경우 원하는 결과를 얻기 위해 여러 정보에 대한 지식을 결합해야 합니다. 이들은 다음과 관련이 있습니다.

  1. 부울 연산자 사용.
  2. 표현 평가의 우선 순위.
  3. 괄호를 사용하여 원하는 평가 순서를 지정합니다.

R에서 여러 조건으로 데이터 프레임 필터링

시작하려면 이 문서에 대한 샘플 데이터 프레임을 만듭니다. 또한 데모를 위해 filter() 기능을 사용하기 위해 dplyr 패키지를 로드합니다.

예제 코드:

# Create a data frame for the article.
SN = 1:7
Alph = c("M", "M", "N", "N", "K", "K", "M")
Nmbr = c(11, 22, 11, 22, 11, 22, 0)
tb = data.frame(SN, Alph, Nmbr)
tb

# Load the dplyr package.
library(dplyr)

출력:

> tb
  SN Alph Nmbr
1  1    M   11
2  2    M   22
3  3    N   11
4  4    N   22
5  5    K   11
6  6    K   22
7  7    M    0

부울 연산자 사용

부울 연산자를 사용하여 여러 조건을 결합합니다.

  1. AND 연산자 &는 양쪽 조건이 모두 TRUE로 평가되는 경우에만 TRUE를 반환합니다.
  2. OR 연산자 |는 한쪽 또는 양쪽 조건 중 하나라도 TRUE로 평가되는 경우 TRUE를 반환합니다.
  3. NOT 연산자 !FALSE 조건을 TRUE로 또는 그 반대로 변환합니다.

관계 연산자를 사용하여 조건을 지정합니다. 같음을 비교하기 위한 연산자는 ==입니다.

예제 코드:

# Filter rows where Alph is "M" OR "N".
tb %>% filter(Alph=="M" | Alph == "N")

# Filter rows where Alph is "M" AND Nmbr == 22.
tb %>% filter(Alph=="M" & Nmbr == 22)

# Filter rows where Alph is NOT "M".
tb %>% filter(!Alph=="M")

출력:

> # Filter rows where Alph is "M" OR "N".
> tb %>% filter(Alph=="M" | Alph == "N")
  SN Alph Nmbr
1  1    M   11
2  2    M   22
3  3    N   11
4  4    N   22
5  7    M    0

> # Filter rows where Alph is "M" AND Nmbr == 22.
> tb %>% filter(Alph=="M" & Nmbr == 22)
  SN Alph Nmbr
1  2    M   22

> # Filter rows where Alph is NOT "M".
> tb %>% filter(!Alph=="M")
  SN Alph Nmbr
1  3    N   11
2  4    N   22
3  5    K   11
4  6    K   22
  1. 첫 번째 예에서는 AlphM 또는 N인 행을 필터링(선택)했습니다. OR 연산자 양쪽에 전체 조건을 지정해야 합니다.
  2. 두 번째 예에서는 AlphM이고 Nmbr22인 행을 동시에 필터링했습니다.
  3. 세 번째 예에서는 Alph 열이 M이 아닌 행을 필터링했습니다.

표현 평가의 우선 순위

여러 조건을 결합하는 맥락에서 연산자의 우선 순위는 다음과 같습니다.

  1. NOT 연산자, !.
  2. AND 연산자, &.
  3. OR 연산자, |.
  4. 피연산자는 왼쪽에서 오른쪽으로 그룹화되며 괄호로 재정의하지 않는 한 위의 내용에 따릅니다.

예제 코드:

# The ! operator only applies to the Alph column.
tb %>% filter(!Alph=="M" & Nmbr==11)

# The & operator only combines its two neighbors.
tb %>% filter(Alph=="M" & Nmbr==11 | Nmbr==22)

# The | operator gets applied AFTER &.
tb %>% filter(Nmbr==11 | Nmbr==22 & Alph=="M")

출력:

> # The ! operator only applies to the Alph column.
> tb %>% filter(!Alph=="M" & Nmbr==11)
  SN Alph Nmbr
1  3    N   11
2  5    K   11

> # The & operator only combines its two neighbors.
> tb %>% filter(Alph=="M" & Nmbr==11 | Nmbr==22)
  SN Alph Nmbr
1  1    M   11
2  2    M   22
3  4    N   22
4  6    K   22

> # The | operator gets applied AFTER &.
> tb %>% filter(Nmbr==11 | Nmbr==22 & Alph=="M")
  SN Alph Nmbr
1  1    M   11
2  2    M   22
3  3    N   11
4  5    K   11

우선 순위 때문에 다음을 확인했습니다.

  1. ! 첫 번째 예에서 & 연산자가 조건을 결합하기 전에 연산자가 Alph에 적용되었습니다.
  2. & 연산자는 결과를 |의 왼쪽으로 전달하기 전에 양쪽의 두 조건을 결합합니다. 운영자.
  3. 세 번째 예에서 &가 먼저 적용되었습니다. |의 오른쪽에는 먼저 &를 두 피연산자에 적용한 결과가 있습니다.

괄호를 사용하여 원하는 조합 지정

괄호를 사용하여 여러 조건을 그룹화하여 원하는 결과를 얻을 수 있습니다. 괄호를 사용하여 작업 순서(우선 순위)를 제어할 수 있습니다.

이전 섹션에서 동일한 예제를 사용하지만 다른 결과를 얻기 위해 괄호를 사용하여 수정합니다.

예제 코드:

# The ! operator now applies to the result of the & operation.
tb %>% filter(!(Alph=="M" & Nmbr==11))

# The & operator now has the result of the | operator on its right.
tb %>% filter(Alph=="M" & (Nmbr==11 | Nmbr==22))

# Now, the | operator gets applied first, and the result is passed to &.
tb %>% filter((Nmbr==11 | Nmbr==22) & Alph=="M")

출력:

> # The ! operator now applies to the result of the & operation.
> tb %>% filter(!(Alph=="M" & Nmbr==11))
  SN Alph Nmbr
1  2    M   22
2  3    N   11
3  4    N   22
4  5    K   11
5  6    K   22
6  7    M    0

> # The & operator now has the result of the | operator on its right.
> tb %>% filter(Alph=="M" & (Nmbr==11 | Nmbr==22))
  SN Alph Nmbr
1  1    M   11
2  2    M   22

> # Now, the | operator gets applied first, and the result is passed to &.
> tb %>% filter((Nmbr==11 | Nmbr==22) & Alph=="M")
  SN Alph Nmbr
1  1    M   11
2  2    M   22

괄호 때문에 이제 다른 결과를 얻습니다.

  1. 첫 번째 예에서 ! 연산자는 이제 & 연산자가 조건을 결합한 후에 적용됩니다.

  2. 두 번째 예에서 | 작업이 먼저 수행됩니다. 그런 다음 결과는 & 오른쪽의 피연산자로 전달됩니다.

  3. 세 번째 예에서 다시 한 번 | 먼저 수행됩니다. 이전 예제와 동일한 결과를 얻습니다.

    이를 이전 섹션의 다른 결과와 비교하십시오.

%in% 연산자 사용

R의 %in% 연산자를 사용하여 열 값이 전달된 벡터에서 언급된 값인 행을 필터링할 수 있습니다. 이는 OR 연산자를 사용하여 동일한 열에서 여러 조건을 결합하는 것과 같습니다.

예제 코드:

# Filter rows where Alph is M or K.
tb %>% filter(Alph %in% c("M", "K"))

출력:

> # Filter rows where Alph is M or K.
> tb %>% filter(Alph %in% c("M", "K"))
  SN Alph Nmbr
1  1    M   11
2  2    M   22
3  5    K   11
4  6    K   22
5  7    M    0

참조

식 평가의 우선 순위에 대한 자세한 내용은 R 언어 정의의 섹션 10.4.2 인픽스 및 접두사 연산자를 참조하세요.

작가: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.