아직도 R의 기본 기능을 배우고 있습니다. 하위 집합 함수는 여러 조건이 있거나없는 단일 열을 기반으로 조건을 필터링하는 것 같습니다.
데이터 프레임에서 데이터를 쉽게 필터링하려면 어떻게해야합니까?
-
여러 조건이 제공 될 때
-
사용 가능한 열에 조건을 적용해야하는 경우
예 : 주어진 데이터 프레임
name D1 D2 D3 D4
julius "A" "A" "B" "B"
cate "D" "E" "A" "C"
karo "A" "D" "C" "E"
이 데이터 프레임을 필터링하여 D1 ~ D4 중 하나가 ‘E’인 이름 만 있으면되도록해야한다고 말하십시오.
name D1 D2 D3 D4
cate "D" "E" "A" "C"
karo "A" "D" "C" "E"
D1이 큰 열 목록이 될 수 있다고 가정하십시오.이 필터를 수행하는 데 권장되는 방법은 무엇입니까? 감사합니다
답변
서브 세트 함수 에서 여러 필터를 결합 하려면 논리 연산자를 사용하십시오.
subset(data, D1 == "E" | D2 == "E")
D1 열 또는 D2 열에 “E”값이있는 행을 선택합니다. 사용 가능한 논리 연산자에 대한 도움말 페이지를보십시오.
> ?"|"
두 번째 질문은 행을 필터링하는 것입니다. 이것은 다음과 같은 방법으로 달성 할 수 있습니다
collist <- c("D1","D2","D3","D4")
sel <- apply(data[,collist],1,function(row) "E" %in% row)
data[sel,]
적용 할 첫 번째 인수 는 필터링해야하는 열을 가정합니다. 두 번째 인수는 1이며, 데이터 행을 반복한다는 의미입니다. 세 번째 인수는 이름이없는 한 줄 함수로 , “E”가 행에 있으면 TRUE 를 반환 하고 “E”가 없으면 FALSE를 반환합니다.
apply 함수의 결과는 데이터의 행 수와 길이가 같은 논리 형 벡터 sel 입니다. 그런 다음이 벡터를 사용하여 필요한 행을 선택합니다.
최신 정보
grep을 사용하여 동일한 작업을 수행 할 수 있습니다.
sel <- apply(data[,collist],1,function(row) length(grep("E",row))>0)
기본 인수가 있는 R grep 에서 제공된 벡터에서 일치하는 패턴을 가진 요소 수를 반환합니다.