R에서 여러 조건으로 데이터 프레임 필터링
데이터 프레임의 행 필터링은 데이터 분석의 일반적인 단계입니다. 대부분의 경우 결과의 행을 둘 이상의 조건을 충족하는 행으로 제한해야 합니다.
이러한 여러 조건이 관련된 경우 원하는 결과를 얻기 위해 여러 정보에 대한 지식을 결합해야 합니다. 이들은 다음과 관련이 있습니다.
- 부울 연산자 사용.
- 표현 평가의 우선 순위.
- 괄호를 사용하여 원하는 평가 순서를 지정합니다.
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
부울 연산자 사용
부울 연산자를 사용하여 여러 조건을 결합합니다.
AND
연산자&
는 양쪽 조건이 모두TRUE
로 평가되는 경우에만TRUE
를 반환합니다.OR
연산자|
는 한쪽 또는 양쪽 조건 중 하나라도TRUE
로 평가되는 경우TRUE
를 반환합니다.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
- 첫 번째 예에서는
Alph
가M
또는N
인 행을 필터링(선택)했습니다.OR
연산자 양쪽에 전체 조건을 지정해야 합니다. - 두 번째 예에서는
Alph
가M
이고Nmbr
이22
인 행을 동시에 필터링했습니다. - 세 번째 예에서는
Alph
열이M
이 아닌 행을 필터링했습니다.
표현 평가의 우선 순위
여러 조건을 결합하는 맥락에서 연산자의 우선 순위는 다음과 같습니다.
NOT
연산자,!
.AND
연산자,&
.OR
연산자,|
.- 피연산자는 왼쪽에서 오른쪽으로 그룹화되며 괄호로 재정의하지 않는 한 위의 내용에 따릅니다.
예제 코드:
# 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
우선 순위 때문에 다음을 확인했습니다.
!
첫 번째 예에서&
연산자가 조건을 결합하기 전에 연산자가Alph
에 적용되었습니다.&
연산자는 결과를|
의 왼쪽으로 전달하기 전에 양쪽의 두 조건을 결합합니다. 운영자.- 세 번째 예에서
&
가 먼저 적용되었습니다.|
의 오른쪽에는 먼저&
를 두 피연산자에 적용한 결과가 있습니다.
괄호를 사용하여 원하는 조합 지정
괄호를 사용하여 여러 조건을 그룹화하여 원하는 결과를 얻을 수 있습니다. 괄호를 사용하여 작업 순서(우선 순위)를 제어할 수 있습니다.
이전 섹션에서 동일한 예제를 사용하지만 다른 결과를 얻기 위해 괄호를 사용하여 수정합니다.
예제 코드:
# 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
괄호 때문에 이제 다른 결과를 얻습니다.
-
첫 번째 예에서
!
연산자는 이제&
연산자가 조건을 결합한 후에 적용됩니다. -
두 번째 예에서
|
작업이 먼저 수행됩니다. 그런 다음 결과는&
오른쪽의 피연산자로 전달됩니다. -
세 번째 예에서 다시 한 번
|
먼저 수행됩니다. 이전 예제와 동일한 결과를 얻습니다.이를 이전 섹션의 다른 결과와 비교하십시오.
%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 인픽스 및 접두사 연산자를 참조하세요.